Compare commits

22 Commits

Author SHA1 Message Date
c13603ebb9 remove hypr from home-manager config 2025-10-09 10:05:39 +02:00
493859058e grub config now included 2025-10-09 10:03:12 +02:00
24667d777e grub devices now 2025-10-09 10:01:09 +02:00
c2563b0521 need to remove watt 2025-10-09 09:57:11 +02:00
d3b2e18af9 not on 25.11 yet 2025-10-09 09:54:27 +02:00
a2ca62e0af little whoopsie 2025-10-09 09:49:10 +02:00
6c53fe1aae switch to gnome for usb config 2025-10-09 09:36:41 +02:00
2e3b0b6a35 try to use watt (and quickshell) 2025-10-09 09:36:19 +02:00
38dc75a6e1 usability improvements 2025-09-23 00:06:24 +02:00
82e26ee498 many improvements 2025-07-17 18:10:37 +02:00
0a731ef17f added new usb system, started modularizing 2025-06-13 18:52:13 +02:00
58b0456f8c more vs code trial and error 2025-06-03 10:17:59 +02:00
b24d0f466a some more adjustments, tried to get vs code to work 2025-05-21 17:30:31 +02:00
d91ebe083d Desktop usability adjustments (#1)
Reviewed-on: #1
2025-05-18 12:56:42 +00:00
1d2b3f799d some more desktop functionality 2025-02-23 19:07:59 +01:00
5c79c29b7d wip - fixes to import and config location 2025-01-30 13:21:11 +01:00
1cd68c8ce1 wip: hyprland adjustments 2025-01-17 20:40:58 +01:00
b22e6ccc91 try hyprland instead 2025-01-17 20:19:21 +01:00
03784c606c fixes for the nvidia-enabled mode 2025-01-13 14:16:48 +01:00
d58bd057ac nvidia fixes 2025-01-13 13:51:22 +01:00
b2a1f39893 switch to two boot modes: with or without dgpu 2025-01-13 13:34:30 +01:00
bbfec6ea9a switch back to explicit sync? 2025-01-13 11:52:23 +01:00
82 changed files with 4002 additions and 785 deletions

3
.gitmodules vendored Normal file
View File

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

14
.sops.yaml Normal file
View File

@@ -0,0 +1,14 @@
# This example uses YAML anchors which allows reuse of multiple keys
# without having to repeat yourself.
# Also see https://github.com/Mic92/dotfiles/blob/d6114726d859df36ccaa32891c4963ae5717ef7f/nixos/.sops.yaml
# for a more complex example.
keys:
- &remy_usb age1027e2vu808mvf95m4f0am3aeg88n8vgzt56s04ndpkgm7awzeajspxl6tu
- &remy_yoga age1t2stzdjfwrtekk23w43623fdvt9awdujth765f8l6mu9g6l4537q4gw8d0
# - &admin_bob age12zlz6lvcdk6eqaewfylg35w0syh58sm7gh53q5vvn7hd7c6nngyseftjxl
creation_rules:
- path_regex: secrets/[^/]+\.(yaml|json|env|ini)$
key_groups:
- age:
- *remy_usb
- *remy_yoga

View File

@@ -17,19 +17,28 @@ Don't forget to add the `#<host>` to the end of the target to specify the host c
### Spectre
###
## Usage
### Deploying to a machine
Run
Run
```bash
nixos-rebuild switch --flake <target>#<machine>
# for instance
nixos-rebuild switch --flake .#spectre
nixos-rebuild switch --flake .#Nixtre
```
to apply the configuration.
### Using `nh`
Updating from a local config is now easy - since `nh` is already specified as installed:
```
nix flake update
nh os switch .
```
### Installer iso
To build an installer iso, run
```bash
@@ -38,9 +47,40 @@ nix build .#nixosConfigurations.bcachefs-iso.config.system.build.isoImage
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
- https://github.com/the-nix-way/dev-templates
- 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

View File

@@ -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'

894
flake.lock generated
View File

@@ -1,5 +1,213 @@
{
"nodes": {
"aquamarine": {
"inputs": {
"hyprutils": [
"hyprland",
"hyprutils"
],
"hyprwayland-scanner": [
"hyprland",
"hyprwayland-scanner"
],
"nixpkgs": [
"hyprland",
"nixpkgs"
],
"systems": [
"hyprland",
"systems"
]
},
"locked": {
"lastModified": 1755946532,
"narHash": "sha256-POePremlUY5GyA1zfbtic6XLxDaQcqHN6l+bIxdT5gc=",
"owner": "hyprwm",
"repo": "aquamarine",
"rev": "81584dae2df6ac79f6b6dae0ecb7705e95129ada",
"type": "github"
},
"original": {
"owner": "hyprwm",
"repo": "aquamarine",
"type": "github"
}
},
"base16": {
"inputs": {
"fromYaml": "fromYaml"
},
"locked": {
"lastModified": 1746562888,
"narHash": "sha256-YgNJQyB5dQiwavdDFBMNKk1wyS77AtdgDk/VtU6wEaI=",
"owner": "SenchoPens",
"repo": "base16.nix",
"rev": "806a1777a5db2a1ef9d5d6f493ef2381047f2b89",
"type": "github"
},
"original": {
"owner": "SenchoPens",
"repo": "base16.nix",
"type": "github"
}
},
"base16-fish": {
"flake": false,
"locked": {
"lastModified": 1622559957,
"narHash": "sha256-PebymhVYbL8trDVVXxCvZgc0S5VxI7I1Hv4RMSquTpA=",
"owner": "tomyun",
"repo": "base16-fish",
"rev": "2f6dd973a9075dabccd26f1cded09508180bf5fe",
"type": "github"
},
"original": {
"owner": "tomyun",
"repo": "base16-fish",
"type": "github"
}
},
"base16-helix": {
"flake": false,
"locked": {
"lastModified": 1748408240,
"narHash": "sha256-9M2b1rMyMzJK0eusea0x3lyh3mu5nMeEDSc4RZkGm+g=",
"owner": "tinted-theming",
"repo": "base16-helix",
"rev": "6c711ab1a9db6f51e2f6887cc3345530b33e152e",
"type": "github"
},
"original": {
"owner": "tinted-theming",
"repo": "base16-helix",
"type": "github"
}
},
"base16-vim": {
"flake": false,
"locked": {
"lastModified": 1732806396,
"narHash": "sha256-e0bpPySdJf0F68Ndanwm+KWHgQiZ0s7liLhvJSWDNsA=",
"owner": "tinted-theming",
"repo": "base16-vim",
"rev": "577fe8125d74ff456cf942c733a85d769afe58b7",
"type": "github"
},
"original": {
"owner": "tinted-theming",
"repo": "base16-vim",
"rev": "577fe8125d74ff456cf942c733a85d769afe58b7",
"type": "github"
}
},
"firefox-gnome-theme": {
"flake": false,
"locked": {
"lastModified": 1748383148,
"narHash": "sha256-pGvD/RGuuPf/4oogsfeRaeMm6ipUIznI2QSILKjKzeA=",
"owner": "rafaelmardojai",
"repo": "firefox-gnome-theme",
"rev": "4eb2714fbed2b80e234312611a947d6cb7d70caf",
"type": "github"
},
"original": {
"owner": "rafaelmardojai",
"repo": "firefox-gnome-theme",
"type": "github"
}
},
"flake-compat": {
"flake": false,
"locked": {
"lastModified": 1747046372,
"narHash": "sha256-CIVLLkVgvHYbgI2UpXvIIBJ12HWgX+fjA8Xf8PUmqCY=",
"owner": "edolstra",
"repo": "flake-compat",
"rev": "9100a0f413b0c601e0533d1d94ffd501ce2e7885",
"type": "github"
},
"original": {
"owner": "edolstra",
"repo": "flake-compat",
"type": "github"
}
},
"flake-parts": {
"inputs": {
"nixpkgs-lib": [
"stylix",
"nixpkgs"
]
},
"locked": {
"lastModified": 1749398372,
"narHash": "sha256-tYBdgS56eXYaWVW3fsnPQ/nFlgWi/Z2Ymhyu21zVM98=",
"owner": "hercules-ci",
"repo": "flake-parts",
"rev": "9305fe4e5c2a6fcf5ba6a3ff155720fbe4076569",
"type": "github"
},
"original": {
"owner": "hercules-ci",
"repo": "flake-parts",
"type": "github"
}
},
"fromYaml": {
"flake": false,
"locked": {
"lastModified": 1731966426,
"narHash": "sha256-lq95WydhbUTWig/JpqiB7oViTcHFP8Lv41IGtayokA8=",
"owner": "SenchoPens",
"repo": "fromYaml",
"rev": "106af9e2f715e2d828df706c386a685698f3223b",
"type": "github"
},
"original": {
"owner": "SenchoPens",
"repo": "fromYaml",
"type": "github"
}
},
"gitignore": {
"inputs": {
"nixpkgs": [
"hyprland",
"pre-commit-hooks",
"nixpkgs"
]
},
"locked": {
"lastModified": 1709087332,
"narHash": "sha256-HG2cCnktfHsKV0s4XW83gU3F57gaTljL9KNSuG6bnQs=",
"owner": "hercules-ci",
"repo": "gitignore.nix",
"rev": "637db329424fd7e46cf4185293b9cc8c88c95394",
"type": "github"
},
"original": {
"owner": "hercules-ci",
"repo": "gitignore.nix",
"type": "github"
}
},
"gnome-shell": {
"flake": false,
"locked": {
"lastModified": 1744584021,
"narHash": "sha256-0RJ4mJzf+klKF4Fuoc8VN8dpQQtZnKksFmR2jhWE1Ew=",
"owner": "GNOME",
"repo": "gnome-shell",
"rev": "52c517c8f6c199a1d6f5118fae500ef69ea845ae",
"type": "github"
},
"original": {
"owner": "GNOME",
"ref": "48.1",
"repo": "gnome-shell",
"type": "github"
}
},
"home-manager": {
"inputs": {
"nixpkgs": [
@@ -7,20 +215,300 @@
]
},
"locked": {
"lastModified": 1720042825,
"narHash": "sha256-A0vrUB6x82/jvf17qPCpxaM+ulJnD8YZwH9Ci0BsAzE=",
"lastModified": 1756679287,
"narHash": "sha256-Xd1vOeY9ccDf5VtVK12yM0FS6qqvfUop8UQlxEB+gTQ=",
"owner": "nix-community",
"repo": "home-manager",
"rev": "e1391fb22e18a36f57e6999c7a9f966dc80ac073",
"rev": "07fc025fe10487dd80f2ec694f1cd790e752d0e8",
"type": "github"
},
"original": {
"owner": "nix-community",
"ref": "release-24.05",
"ref": "release-25.05",
"repo": "home-manager",
"type": "github"
}
},
"home-manager_2": {
"inputs": {
"nixpkgs": [
"zen-browser",
"nixpkgs"
]
},
"locked": {
"lastModified": 1752603129,
"narHash": "sha256-S+wmHhwNQ5Ru689L2Gu8n1OD6s9eU9n9mD827JNR+kw=",
"owner": "nix-community",
"repo": "home-manager",
"rev": "e8c19a3cec2814c754f031ab3ae7316b64da085b",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "home-manager",
"type": "github"
}
},
"hyprcursor": {
"inputs": {
"hyprlang": [
"hyprland",
"hyprlang"
],
"nixpkgs": [
"hyprland",
"nixpkgs"
],
"systems": [
"hyprland",
"systems"
]
},
"locked": {
"lastModified": 1753964049,
"narHash": "sha256-lIqabfBY7z/OANxHoPeIrDJrFyYy9jAM4GQLzZ2feCM=",
"owner": "hyprwm",
"repo": "hyprcursor",
"rev": "44e91d467bdad8dcf8bbd2ac7cf49972540980a5",
"type": "github"
},
"original": {
"owner": "hyprwm",
"repo": "hyprcursor",
"type": "github"
}
},
"hyprgraphics": {
"inputs": {
"hyprutils": [
"hyprland",
"hyprutils"
],
"nixpkgs": [
"hyprland",
"nixpkgs"
],
"systems": [
"hyprland",
"systems"
]
},
"locked": {
"lastModified": 1756891319,
"narHash": "sha256-/e6OXxzbAj/o97Z1dZgHre4bNaVjapDGscAujSCQSbI=",
"owner": "hyprwm",
"repo": "hyprgraphics",
"rev": "621e2e00f1736aa18c68f7dfbf2b9cff94b8cc4d",
"type": "github"
},
"original": {
"owner": "hyprwm",
"repo": "hyprgraphics",
"type": "github"
}
},
"hyprland": {
"inputs": {
"aquamarine": "aquamarine",
"hyprcursor": "hyprcursor",
"hyprgraphics": "hyprgraphics",
"hyprland-protocols": "hyprland-protocols",
"hyprland-qtutils": "hyprland-qtutils",
"hyprlang": "hyprlang",
"hyprutils": "hyprutils",
"hyprwayland-scanner": "hyprwayland-scanner",
"nixpkgs": "nixpkgs",
"pre-commit-hooks": "pre-commit-hooks",
"systems": "systems",
"xdph": "xdph"
},
"locked": {
"lastModified": 1757423991,
"narHash": "sha256-tL+b6WC4gJJSo6wjNVIZpQ0DsYg8RmoGHxYuk6jJKbU=",
"owner": "hyprwm",
"repo": "Hyprland",
"rev": "150d693fe794a01aab762a18d2d8a2c8bc54b43c",
"type": "github"
},
"original": {
"owner": "hyprwm",
"repo": "Hyprland",
"type": "github"
}
},
"hyprland-protocols": {
"inputs": {
"nixpkgs": [
"hyprland",
"nixpkgs"
],
"systems": [
"hyprland",
"systems"
]
},
"locked": {
"lastModified": 1749046714,
"narHash": "sha256-kymV5FMnddYGI+UjwIw8ceDjdeg7ToDVjbHCvUlhn14=",
"owner": "hyprwm",
"repo": "hyprland-protocols",
"rev": "613878cb6f459c5e323aaafe1e6f388ac8a36330",
"type": "github"
},
"original": {
"owner": "hyprwm",
"repo": "hyprland-protocols",
"type": "github"
}
},
"hyprland-qt-support": {
"inputs": {
"hyprlang": [
"hyprland",
"hyprland-qtutils",
"hyprlang"
],
"nixpkgs": [
"hyprland",
"hyprland-qtutils",
"nixpkgs"
],
"systems": [
"hyprland",
"hyprland-qtutils",
"systems"
]
},
"locked": {
"lastModified": 1749154592,
"narHash": "sha256-DO7z5CeT/ddSGDEnK9mAXm1qlGL47L3VAHLlLXoCjhE=",
"owner": "hyprwm",
"repo": "hyprland-qt-support",
"rev": "4c8053c3c888138a30c3a6c45c2e45f5484f2074",
"type": "github"
},
"original": {
"owner": "hyprwm",
"repo": "hyprland-qt-support",
"type": "github"
}
},
"hyprland-qtutils": {
"inputs": {
"hyprland-qt-support": "hyprland-qt-support",
"hyprlang": [
"hyprland",
"hyprlang"
],
"hyprutils": [
"hyprland",
"hyprland-qtutils",
"hyprlang",
"hyprutils"
],
"nixpkgs": [
"hyprland",
"nixpkgs"
],
"systems": [
"hyprland",
"systems"
]
},
"locked": {
"lastModified": 1753819801,
"narHash": "sha256-tHe6XeNeVeKapkNM3tcjW4RuD+tB2iwwoogWJOtsqTI=",
"owner": "hyprwm",
"repo": "hyprland-qtutils",
"rev": "b308a818b9dcaa7ab8ccab891c1b84ebde2152bc",
"type": "github"
},
"original": {
"owner": "hyprwm",
"repo": "hyprland-qtutils",
"type": "github"
}
},
"hyprlang": {
"inputs": {
"hyprutils": [
"hyprland",
"hyprutils"
],
"nixpkgs": [
"hyprland",
"nixpkgs"
],
"systems": [
"hyprland",
"systems"
]
},
"locked": {
"lastModified": 1756810301,
"narHash": "sha256-wgZ3VW4VVtjK5dr0EiK9zKdJ/SOqGIBXVG85C3LVxQA=",
"owner": "hyprwm",
"repo": "hyprlang",
"rev": "3d63fb4a42c819f198deabd18c0c2c1ded1de931",
"type": "github"
},
"original": {
"owner": "hyprwm",
"repo": "hyprlang",
"type": "github"
}
},
"hyprutils": {
"inputs": {
"nixpkgs": [
"hyprland",
"nixpkgs"
],
"systems": [
"hyprland",
"systems"
]
},
"locked": {
"lastModified": 1756117388,
"narHash": "sha256-oRDel6pNl/T2tI+nc/USU9ZP9w08dxtl7hiZxa0C/Wc=",
"owner": "hyprwm",
"repo": "hyprutils",
"rev": "b2ae3204845f5f2f79b4703b441252d8ad2ecfd0",
"type": "github"
},
"original": {
"owner": "hyprwm",
"repo": "hyprutils",
"type": "github"
}
},
"hyprwayland-scanner": {
"inputs": {
"nixpkgs": [
"hyprland",
"nixpkgs"
],
"systems": [
"hyprland",
"systems"
]
},
"locked": {
"lastModified": 1755184602,
"narHash": "sha256-RCBQN8xuADB0LEgaKbfRqwm6CdyopE1xIEhNc67FAbw=",
"owner": "hyprwm",
"repo": "hyprwayland-scanner",
"rev": "b3b0f1f40ae09d4447c20608e5a4faf8bf3c492d",
"type": "github"
},
"original": {
"owner": "hyprwm",
"repo": "hyprwayland-scanner",
"type": "github"
}
},
"nix-flatpak": {
"locked": {
"lastModified": 1711997201,
@@ -39,27 +527,27 @@
},
"nixpkgs": {
"locked": {
"lastModified": 1725001927,
"narHash": "sha256-eV+63gK0Mp7ygCR0Oy4yIYSNcum2VQwnZamHxYTNi+M=",
"owner": "nixos",
"lastModified": 1757068644,
"narHash": "sha256-NOrUtIhTkIIumj1E/Rsv1J37Yi3xGStISEo8tZm3KW4=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "6e99f2a27d600612004fbd2c3282d614bfee6421",
"rev": "8eb28adfa3dc4de28e792e3bf49fcf9007ca8ac9",
"type": "github"
},
"original": {
"owner": "nixos",
"ref": "nixos-24.05",
"owner": "NixOS",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs-unstable": {
"locked": {
"lastModified": 1724819573,
"narHash": "sha256-GnR7/ibgIH1vhoy8cYdmXE6iyZqKqFxQSVkFgosBh6w=",
"lastModified": 1757347588,
"narHash": "sha256-tLdkkC6XnsY9EOZW9TlpesTclELy8W7lL2ClL+nma8o=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "71e91c409d1e654808b2621f28a327acfdad8dc2",
"rev": "b599843bad24621dcaa5ab60dac98f9b0eb1cabe",
"type": "github"
},
"original": {
@@ -69,12 +557,388 @@
"type": "github"
}
},
"nixpkgs_2": {
"locked": {
"lastModified": 1757408970,
"narHash": "sha256-aSgK4BLNFFGvDTNKPeB28lVXYqVn8RdyXDNAvgGq+k0=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "d179d77c139e0a3f5c416477f7747e9d6b7ec315",
"type": "github"
},
"original": {
"owner": "nixos",
"ref": "nixos-25.05",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs_3": {
"locked": {
"lastModified": 1751211869,
"narHash": "sha256-1Cu92i1KSPbhPCKxoiVG5qnoRiKTgR5CcGSRyLpOd7Y=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "b43c397f6c213918d6cfe6e3550abfe79b5d1c51",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixos-25.05",
"repo": "nixpkgs",
"type": "github"
}
},
"nur": {
"inputs": {
"flake-parts": [
"stylix",
"flake-parts"
],
"nixpkgs": [
"stylix",
"nixpkgs"
],
"treefmt-nix": "treefmt-nix"
},
"locked": {
"lastModified": 1751320053,
"narHash": "sha256-3m6RMw0FbbaUUa01PNaMLoO7D99aBClmY5ed9V3vz+0=",
"owner": "nix-community",
"repo": "NUR",
"rev": "cbde1735782f9c2bb2c63d5e05fba171a14a4670",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "NUR",
"type": "github"
}
},
"pre-commit-hooks": {
"inputs": {
"flake-compat": "flake-compat",
"gitignore": "gitignore",
"nixpkgs": [
"hyprland",
"nixpkgs"
]
},
"locked": {
"lastModified": 1757239681,
"narHash": "sha256-E9spYi9lxm2f1zWQLQ7xQt8Xs2nWgr1T4QM7ZjLFphM=",
"owner": "cachix",
"repo": "git-hooks.nix",
"rev": "ab82ab08d6bf74085bd328de2a8722c12d97bd9d",
"type": "github"
},
"original": {
"owner": "cachix",
"repo": "git-hooks.nix",
"type": "github"
}
},
"quickshell": {
"inputs": {
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1758273351,
"narHash": "sha256-wOv1guIi9THD1NjOtBU2Xh/Avg9xv7nIjsfFSkr1NeQ=",
"ref": "refs/heads/master",
"rev": "e9a574d919a89602d2868621576b2ccae54a5cb0",
"revCount": 675,
"type": "git",
"url": "https://git.outfoxxed.me/outfoxxed/quickshell"
},
"original": {
"type": "git",
"url": "https://git.outfoxxed.me/outfoxxed/quickshell"
}
},
"root": {
"inputs": {
"home-manager": "home-manager",
"hyprland": "hyprland",
"nix-flatpak": "nix-flatpak",
"nixpkgs": "nixpkgs",
"nixpkgs-unstable": "nixpkgs-unstable"
"nixpkgs": "nixpkgs_2",
"nixpkgs-unstable": "nixpkgs-unstable",
"quickshell": "quickshell",
"sops-nix": "sops-nix",
"stylix": "stylix",
"watt": "watt",
"zen-browser": "zen-browser"
}
},
"sops-nix": {
"inputs": {
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1757449901,
"narHash": "sha256-qwN8nYdSRnmmyyi+uR6m4gXnVktmy5smG1MOrSFD8PI=",
"owner": "Mic92",
"repo": "sops-nix",
"rev": "3b4a369df9dd6ee171a7ea4448b50e2528faf850",
"type": "github"
},
"original": {
"owner": "Mic92",
"repo": "sops-nix",
"type": "github"
}
},
"stylix": {
"inputs": {
"base16": "base16",
"base16-fish": "base16-fish",
"base16-helix": "base16-helix",
"base16-vim": "base16-vim",
"firefox-gnome-theme": "firefox-gnome-theme",
"flake-parts": "flake-parts",
"gnome-shell": "gnome-shell",
"nixpkgs": "nixpkgs_3",
"nur": "nur",
"systems": "systems_2",
"tinted-foot": "tinted-foot",
"tinted-kitty": "tinted-kitty",
"tinted-schemes": "tinted-schemes",
"tinted-tmux": "tinted-tmux",
"tinted-zed": "tinted-zed"
},
"locked": {
"lastModified": 1757361712,
"narHash": "sha256-GwObJtrAqVim66e4Jb5VzAKT6zGFJ3KOi63rfcrfMV4=",
"owner": "danth",
"repo": "stylix",
"rev": "3bf1430ed85a4484e4e1facee2344d2bb20288e6",
"type": "github"
},
"original": {
"owner": "danth",
"ref": "release-25.05",
"repo": "stylix",
"type": "github"
}
},
"systems": {
"locked": {
"lastModified": 1689347949,
"narHash": "sha256-12tWmuL2zgBgZkdoB6qXZsgJEH9LR3oUgpaQq2RbI80=",
"owner": "nix-systems",
"repo": "default-linux",
"rev": "31732fcf5e8fea42e59c2488ad31a0e651500f68",
"type": "github"
},
"original": {
"owner": "nix-systems",
"repo": "default-linux",
"type": "github"
}
},
"systems_2": {
"locked": {
"lastModified": 1681028828,
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
"owner": "nix-systems",
"repo": "default",
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
"type": "github"
},
"original": {
"owner": "nix-systems",
"repo": "default",
"type": "github"
}
},
"tinted-foot": {
"flake": false,
"locked": {
"lastModified": 1726913040,
"narHash": "sha256-+eDZPkw7efMNUf3/Pv0EmsidqdwNJ1TaOum6k7lngDQ=",
"owner": "tinted-theming",
"repo": "tinted-foot",
"rev": "fd1b924b6c45c3e4465e8a849e67ea82933fcbe4",
"type": "github"
},
"original": {
"owner": "tinted-theming",
"repo": "tinted-foot",
"rev": "fd1b924b6c45c3e4465e8a849e67ea82933fcbe4",
"type": "github"
}
},
"tinted-kitty": {
"flake": false,
"locked": {
"lastModified": 1735730497,
"narHash": "sha256-4KtB+FiUzIeK/4aHCKce3V9HwRvYaxX+F1edUrfgzb8=",
"owner": "tinted-theming",
"repo": "tinted-kitty",
"rev": "de6f888497f2c6b2279361bfc790f164bfd0f3fa",
"type": "github"
},
"original": {
"owner": "tinted-theming",
"repo": "tinted-kitty",
"type": "github"
}
},
"tinted-schemes": {
"flake": false,
"locked": {
"lastModified": 1750770351,
"narHash": "sha256-LI+BnRoFNRa2ffbe3dcuIRYAUcGklBx0+EcFxlHj0SY=",
"owner": "tinted-theming",
"repo": "schemes",
"rev": "5a775c6ffd6e6125947b393872cde95867d85a2a",
"type": "github"
},
"original": {
"owner": "tinted-theming",
"repo": "schemes",
"type": "github"
}
},
"tinted-tmux": {
"flake": false,
"locked": {
"lastModified": 1751159871,
"narHash": "sha256-UOHBN1fgHIEzvPmdNMHaDvdRMgLmEJh2hNmDrp3d3LE=",
"owner": "tinted-theming",
"repo": "tinted-tmux",
"rev": "bded5e24407cec9d01bd47a317d15b9223a1546c",
"type": "github"
},
"original": {
"owner": "tinted-theming",
"repo": "tinted-tmux",
"type": "github"
}
},
"tinted-zed": {
"flake": false,
"locked": {
"lastModified": 1751158968,
"narHash": "sha256-ksOyv7D3SRRtebpXxgpG4TK8gZSKFc4TIZpR+C98jX8=",
"owner": "tinted-theming",
"repo": "base16-zed",
"rev": "86a470d94204f7652b906ab0d378e4231a5b3384",
"type": "github"
},
"original": {
"owner": "tinted-theming",
"repo": "base16-zed",
"type": "github"
}
},
"treefmt-nix": {
"inputs": {
"nixpkgs": [
"stylix",
"nur",
"nixpkgs"
]
},
"locked": {
"lastModified": 1733222881,
"narHash": "sha256-JIPcz1PrpXUCbaccEnrcUS8jjEb/1vJbZz5KkobyFdM=",
"owner": "numtide",
"repo": "treefmt-nix",
"rev": "49717b5af6f80172275d47a418c9719a31a78b53",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "treefmt-nix",
"type": "github"
}
},
"watt": {
"inputs": {
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1749377316,
"narHash": "sha256-hw3rL4rlIlYJMTeE7DlQ3lRhQDJURAhE+PC/NT4VAAQ=",
"owner": "NotAShelf",
"repo": "watt",
"rev": "154724c7b1bd49654ea55df719e1eb3219ec2000",
"type": "github"
},
"original": {
"owner": "NotAShelf",
"ref": "v0.3.2",
"repo": "watt",
"type": "github"
}
},
"xdph": {
"inputs": {
"hyprland-protocols": [
"hyprland",
"hyprland-protocols"
],
"hyprlang": [
"hyprland",
"hyprlang"
],
"hyprutils": [
"hyprland",
"hyprutils"
],
"hyprwayland-scanner": [
"hyprland",
"hyprwayland-scanner"
],
"nixpkgs": [
"hyprland",
"nixpkgs"
],
"systems": [
"hyprland",
"systems"
]
},
"locked": {
"lastModified": 1755354946,
"narHash": "sha256-zdov5f/GcoLQc9qYIS1dUTqtJMeDqmBmo59PAxze6e4=",
"owner": "hyprwm",
"repo": "xdg-desktop-portal-hyprland",
"rev": "a10726d6a8d0ef1a0c645378f983b6278c42eaa0",
"type": "github"
},
"original": {
"owner": "hyprwm",
"repo": "xdg-desktop-portal-hyprland",
"type": "github"
}
},
"zen-browser": {
"inputs": {
"home-manager": "home-manager_2",
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1757395105,
"narHash": "sha256-kwctEcCrHXZg80POmuOfqRqxSjy8bXhdBuNcRWaEpFA=",
"owner": "0xc000022070",
"repo": "zen-browser-flake",
"rev": "d7b87e67233fdb42e655600f3de4c2e8a13bc6a7",
"type": "github"
},
"original": {
"owner": "0xc000022070",
"repo": "zen-browser-flake",
"type": "github"
}
}
},

View File

@@ -2,37 +2,116 @@
description = "Nix config entry point";
inputs = {
nixpkgs.url = "github:nixos/nixpkgs/nixos-24.05";
nixpkgs.url = "github:nixos/nixpkgs/nixos-25.05";
nixpkgs-unstable.url = "github:nixos/nixpkgs/nixos-unstable";
# Home manager
home-manager.url = "github:nix-community/home-manager/release-24.05";
home-manager.url = "github:nix-community/home-manager/release-25.05";
home-manager.inputs.nixpkgs.follows = "nixpkgs";
# Managing flatpak apps
nix-flatpak.url = "github:gmodena/nix-flatpak/?ref=v0.4.1";
# hyprland, plugins and related utils
hyprland.url = "github:hyprwm/Hyprland";
stylix.url = "github:danth/stylix/release-25.05";
# zen browser
zen-browser.url = "github:0xc000022070/zen-browser-flake";
# IMPORTANT: we're using "libgbm" and is only available in unstable so ensure
# to have it up-to-date or simply don't specify the nixpkgs input
zen-browser.inputs.nixpkgs.follows = "nixpkgs";
# power management
watt = {
url = "github:NotAShelf/watt/?ref=v0.3.2";
inputs.nixpkgs.follows = "nixpkgs";
};
# secrets
sops-nix.url = "github:Mic92/sops-nix";
sops-nix.inputs.nixpkgs.follows = "nixpkgs";
# quickshell
quickshell = {
url = "git+https://git.outfoxxed.me/outfoxxed/quickshell";
inputs.nixpkgs.follows = "nixpkgs";
};
};
outputs = {
self,
nixpkgs,
nixpkgs-unstable,
home-manager,
stylix,
sops-nix,
quickshell,
...
} @ inputs: {
} @ inputs:
let
in
{
## NixOS configurations are the main output of this flake
# HP Spectre x360 2018
nixosConfigurations.spectre = nixpkgs.lib.nixosSystem {
nixosConfigurations.Nixtre = nixpkgs.lib.nixosSystem {
system = "x86_64-linux";
specialArgs = { inherit inputs; };
modules = [
./hosts/spectre-x360-2018
stylix.nixosModules.stylix
home-manager.nixosModules.home-manager
{
home-manager.useGlobalPkgs = true;
home-manager.useUserPackages = true;
home-manager.extraSpecialArgs = { inherit inputs; };
home-manager.users.remy.imports = [
./users/remy.nix
./users/remy_spectre
inputs.nix-flatpak.homeManagerModules.nix-flatpak
];
}
];
};
nixosConfigurations.nichts = nixpkgs.lib.nixosSystem {
system = "x86_64-linux";
specialArgs = { inherit inputs; };
modules = [
./hosts/mobile-usb
stylix.nixosModules.stylix
home-manager.nixosModules.home-manager
{
home-manager.useGlobalPkgs = true;
home-manager.useUserPackages = true;
home-manager.extraSpecialArgs = { inherit inputs; };
home-manager.users.remy.imports = [
./users/remy_usb
inputs.nix-flatpak.homeManagerModules.nix-flatpak
];
}
];
};
nixosConfigurations.nyx = nixpkgs.lib.nixosSystem {
system = "x86_64-linux";
specialArgs = { inherit inputs; };
modules = [
./hosts/yoga-7-pro
sops-nix.nixosModules.sops
stylix.nixosModules.stylix
home-manager.nixosModules.home-manager
{
home-manager.useGlobalPkgs = true;
home-manager.useUserPackages = true;
home-manager.extraSpecialArgs = { inherit inputs; };
home-manager.users.remy.imports = [
./users/remy_yoga
inputs.nix-flatpak.homeManagerModules.nix-flatpak
];
}

View 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?
}

View File

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

View File

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

View File

@@ -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.devices = ["/dev/sdb"];
boot.loader.grub.efiInstallAsRemovable = true;
boot.loader.systemd-boot.enable = false;
boot.loader.efi.canTouchEfiVariables = false;
boot.tmp.useTmpfs = true;
}

View File

@@ -4,12 +4,20 @@
imports = [
./configuration.nix
./hardware-configuration.nix
../../modules/nixos/bluetooth.nix
../../modules/nixos/flakes.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/networking.nix
../../modules/nixos/nh.nix
../../modules/nixos/nvidia.nix
../../modules/nixos/pipewire.nix
../../modules/nixos/podman.nix
../../modules/nixos/power.nix
../../modules/nixos/stylix.nix
../../utils/binary-cache.nix
../../utils/garbage-collection.nix
];

View 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>`

View File

@@ -0,0 +1,27 @@
# Edit this configuration file to define what should be installed on
# your system. Help is available in the configuration.nix(5) man page, on
# https://search.nixos.org/options and in the NixOS manual (`nixos-help`).
{ config, lib, pkgs, ... }:
{
boot.loader = {
systemd-boot.enable = true;
timeout = 0;
efi.canTouchEfiVariables = true;
};
# cause it is so inconveniently located
services.logind.powerKey = "ignore";
services.logind.lidSwitch = "sleep";
services.logind.lidSwitchDocked = "ignore";
# requires too many shenanigans so I just install using --no-root-passwd
# users.users.root.hashedPassword = "!";
nixpkgs.config.allowUnfree = true;
# For more information, see `man configuration.nix` or https://nixos.org/manual/nixos/stable/options#opt-system.stateVersion .
system.stateVersion = "24.05"; # Did you read the comment?
}

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -0,0 +1,8 @@
{pkgs, ...}:
{
programs.direnv = {
enable = true;
# enableFishIntegration = true; # see note on other shells below
nix-direnv.enable = true;
};
}

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

View File

@@ -0,0 +1,11 @@
{pkgs, ...}:
{
home.packages = [
# pdf viewer
pkgs.papers
# image viewer
pkgs.loupe
# video player
pkgs.showtime
];
}

View File

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

View File

@@ -1,19 +1,19 @@
{ lib, ... }: {
{
lib, pkgs, ...
}:
{
# requires that flatpaks be enabled in the system configuration as well
services.flatpak.enable = true;
services.flatpak.update.auto.enable = false;
services.flatpak.uninstallUnmanaged = false;
services.flatpak.packages = [
"com.calibre_ebook.calibre"
"com.github.flxzt.rnote"
"com.github.tchx84.Flatseal"
"com.spotify.Client"
"io.podman_desktop.PodmanDesktop"
"org.pipewire.Helvum"
"io.github.zen_browser.zen"
"im.riot.Riot"
"com.valvesoftware.Steam"
"org.prismlauncher.PrismLauncher"
];
}
}

View File

@@ -0,0 +1,47 @@
{pkgs, config, lib, ...}:
let
hyprctl = "${pkgs.hyprland}/bin/hyprctl";
in
{
config = {
services.fusuma = {
enable = true;
settings = {
swipe = {
"3" = {
up = {
command = "exec ${hyprctl} dispatch fullscreen 1";
};
down = {
command = "exec ${lib.getExe config.nix-config.launcher}";
};
};
};
pinch = {
"4" = {
"in" = {
command = "exec ${hyprctl} dispatch togglespecialworkspace magic";
};
"out" = {
command = "exec ${hyprctl} dispatch togglespecialworkspace magic";
};
};
};
hold = {
"5" = {
command = "exec ${lib.getExe config.nix-config.launcher}";
threshold = 0.1;
};
};
threshold = {
pinch = 0.1;
};
};
};
};
}

View File

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

View File

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

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

View File

@@ -0,0 +1,31 @@
{inputs, pkgs, lib, config, ...}:
let
cfg = config.nix-config.hypr;
in
{
options = {
nix-config.hypr.autostartApps = lib.mkOption {
type = lib.types.listOf lib.types.str;
default = [
"gnome-keyring-daemon --start --components=secrets"
"wl-paste --watch cliphist store"
"${lib.getExe pkgs.waybar}"
"${lib.getExe pkgs.hypridle}"
# TODO - currently broken
"${pkgs.owncloud-client}"
"${lib.getExe pkgs.keepassxc}"
];
description = "List of applications to start automatically in Hyprland.";
};
};
config = {
wayland.windowManager.hyprland = {
enable = true;
systemd.enable = true;
settings = {
exec-once = cfg.autostartApps;
};
};
};
}

View File

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

View File

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

View File

@@ -0,0 +1,154 @@
{inputs, pkgs, lib, config, ...}:
let
cfg = config.nix-config.hypr;
in
{
config = {
wayland.windowManager.hyprland = {
enable = true;
systemd.enable = true;
settings = {
"$mod" = "SUPER";
# Global bindings
bind = [
# Launch applications
"$mod, space, exec, ${lib.getExe config.nix-config.launcher}"
"$mod, return, exec, kitty"
"$mod, b, exec, ${cfg.browser}"
"$mod, s, exec, ${cfg.ide}"
"$mod, e, exec, nautilus"
# Lock screen
"$mod, l, exec, loginctl lock-session"
# Clipboard management
"$mod, V, exec, cliphist list | ${lib.getExe config.nix-config.launcher} --dmenu | cliphist decode | wl-copy"
# Close window
"$mod, Q, killactive,"
# Force close window
"$mod+Shift, Q, forcekillactive,"
# Toggle Floating and reduce size
"$mod, f, togglefloating,"
"$mod, f, resizeactive, 50% 50%,"
# "$mod, P, pseudo, " # dwindle
# "$mod, J, togglesplit, " # dwindle
# Toggle fullscreen
"$mod+Shift, f, fullscreen,"
# Alt-tab alternative
"$mod, Tab, cyclenext,"
"$mod, Tab, bringactivetotop,"
# Move the window
"$mod+Shift, left, movewindow, l"
"$mod+Shift, right, movewindow, r"
"$mod+Shift, up, movewindow, u"
"$mod+Shift, down, movewindow, d"
# Move window to workspace
"$mod+Ctrl, left, movetoworkspace, -1"
"$mod+Ctrl, right, movetoworkspace, +1"
# Switch workspace
"$mod, left, workspace, -1"
"$mod, right, workspace, +1"
"$mod, mouse_down, workspace, -1"
"$mod, mouse_up, workspace, +1"
# move to scratch workspace
"$mod+Ctrl, up, movetoworkspace, special:magic"
"$mod+Ctrl, down, movetoworkspace, prev"
# switch to scratch workspace
"$mod, up, togglespecialworkspace, magic"
"$mod, down, togglespecialworkspace, magic"
# Screenshot
"$mod, Print, exec, hyprshot -m region -o ~/Pictures/Screenshots"
"$mod+Shift, Print, exec, hyprshot -m window -o ~/Pictures/Screenshots"
# # somehow logitech calls this SUPER_L but we refer to it by its code
"SUPER_L&Shift_L, S, exec, hyprshot -m region -o ~/Pictures/Screenshots"
"Shift&SUPER_L&Shift_L, S, exec, hyprshot -m window -o ~/Pictures/Screenshots"
# when there is a dedicated screenshot button
", XF86Cut, exec, hyprshot -m region -o ~/Pictures/Screenshots"
"Shift, XF86Cut, exec, hyprshot -m window -o ~/Pictures/Screenshots"
# Power menu
", XF86PowerOff, exec, ${lib.getExe config.nix-config.powerMenu}"
# Other pickers using the same launcher
"$mod+Ctrl, space, exec, ${lib.getExe config.nix-config.filePicker}"
"$mod, period, exec, ${lib.getExe config.nix-config.emojiPicker}"
];
# repeatable bindings
binde = [
# Fn keys
", XF86MonBrightnessDown, exec, brightnessctl set 5%-"
", XF86MonBrightnessUp, exec, brightnessctl set +5%"
", XF86AudioRaiseVolume, exec, wpctl set-volume -l 1 @DEFAULT_AUDIO_SINK@ 5%+"
", XF86AudioLowerVolume, exec, wpctl set-volume -l 1 @DEFAULT_AUDIO_SINK@ 5%-"
", XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle"
# Reshape the window in focus
"$mod, MINUS, resizeactive, -2% -2%"
"$mod, KP_Subtract, resizeactive, -2% -2%"
"$mod, PLUS, resizeactive, 2% 2%"
"$mod, KP_Add, resizeactive, 2% 2%"
];
# lock-screen bindings
bindl = [
", XF86PowerOff, exec, hyprctl dispatch dpms on eDP-1"
## depending on the setup we expect different behaviors when closing the lid:
# either sleep & lock screen OR switch to clamshell mode
# through the `services.logind.lidSwitch` and `services.logind.lidSwitchDocked` we can differentiate both cases
# when not docked, the system is put to sleep and the screen is implicitly locked as per the hypridle configuration
# when docked, the lid switch is ignored by logind and needs to be handled manually, see below:
# if an additional monitor is detected, simply deactivate the internal screen and continue working on the external monitor
", switch:on:Lid Switch, exec, hyprctl keyword monitor 'eDP-1,disable"
## on reopening the lid, turn the internal screen back on
", switch:off:Lid Switch, exec, hyprctl dispatch dpms on eDP-1"
# we need to reload the monitor configuration so that the internal screen is turned back on
", switch:off:Lid Switch, exec, hyprctl reload"
];
# bindr = [
# # Overview
# "$mod, , overview:toggle"
# ];
bindm = [
# move the window using left click
"$mod, mouse:272, movewindow"
# resize the window using right click
"$mod, mouse:273, resizewindow"
];
};
extraConfig = ''
bind= , XF86AudioMicMute, submap, player_submap
submap=player_submap
bind=, XF86AudioRaiseVolume, exec, notify-send previous; hyprctl dispatch submap reset
bind=, XF86AudioLowerVolume, exec, notify-send next; hyprctl dispatch submap reset
bind=, XF86AudioMicMute, exec, notify-send pause; hyprctl dispatch submap reset
submap=reset
'';
};
};
}

View File

@@ -0,0 +1,57 @@
{inputs, pkgs, lib, config, ...}:
let
cfg = config.nix-config.hypr;
in
{
config = {
wayland.windowManager.hyprland = {
settings = {
master = {
# TODO - I am not yet happy about the layout + toggle keybinds
orientation = "center";
# equivalent toalways_center_master = true;
slave_count_for_center_master = 0;
# new_is_master = false;
# allow_small_split = true;
# special_scale_factor = 0.80;
mfact = 0.34;
inherit_fullscreen = false;
# always_center_master = false;
# allow a maximum of 3 windows in the master area for 3-column layout
};
#create special workspaces with no gaps
workspace = [
"w[t1], gapsout:0, gapsin:0"
"w[tg1], gapsout:0, gapsin:0"
"f[1], gapsout:0, gapsin:0"
];
# automatically assign windows to workspaces when there is only one window
windowrulev2 = [
"bordersize 0, floating:0, onworkspace:w[t1]"
"rounding 0, floating:0, onworkspace:w[t1]"
"bordersize 0, floating:0, onworkspace:w[tg1]"
"rounding 0, floating:0, onworkspace:w[tg1]"
"bordersize 0, floating:0, onworkspace:f[1]"
"rounding 0, floating:0, onworkspace:f[1]"
];
misc = {
vfr = false;
disable_hyprland_logo = true;
};
# Keybind to toggle between 2 and 3 column master layout
bind = [
# Toggle master layout between 2 and 3 columns
"$mod, m, exec, hyprctl dispatch layoutmsg orientationleft"
"$mod, m, exec, hyprctl dispatch layoutmsg mfact exact 0.5"
# "SUPER_SHIFT,C,exec,hyprctl dispatch layoutmsg swap_master_count 2 3"
];
};
};
};
}

View File

@@ -0,0 +1,20 @@
{inputs, pkgs, lib, config, ...}:
let
cfg = config.nix-config.hypr;
in
{
# packages required by the current hyprland setup
home.packages = [
pkgs.hyprshot
pkgs.nautilus
pkgs.gnome-control-center
pkgs.gnome-bluetooth # needed by gnome-control-center to manage bluetooth
pkgs.brightnessctl
pkgs.cliphist
pkgs.wl-clipboard
pkgs.gcr # Provides org.gnome.keyring.SystemPrompter
];
# Also use gnome keyring
services.gnome-keyring.enable = true;
}

View File

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

View File

@@ -0,0 +1,66 @@
{
pkgs,
lib,
...
}:
let
wallpapers = [
../../../wallpapers/codioful-formerly-gradienta-lweK7Wme_jo-unsplash.jpg
../../../wallpapers/codioful-formerly-gradienta-n2XqPm7Bqhk-unsplash.jpg
../../../wallpapers/luke-chesser-eICUFSeirc0-unsplash.jpg
../../../wallpapers/luke-chesser-pJadQetzTkI-unsplash.jpg
../../../wallpapers/magicpattern-87PP9Zd7MNo-unsplash.jpg
];
monitor = ""; # leave empty to set the wallpaper on all monitors
wallpaperPicker = pkgs.writeShellScriptBin "wallpaper-picker" ''
#!/usr/bin/env bash
# use an array of wallpapers to randomly select one
wallpapers=(${pkgs.lib.concatStringsSep " " (map (p: "${p}") wallpapers)})
# select a random wallpaper from the array
index=$((RANDOM % ${toString (builtins.length wallpapers)}))
wallpaper="''${wallpapers[index]}"
echo "Setting wallpaper to: $wallpaper"
hyprctl hyprpaper unload all
hyprctl hyprpaper reload "${monitor},$wallpaper"
'';
in {
home.packages = [wallpaperPicker];
services.hyprpaper = {
enable = true;
settings = {
ipc = "on";
};
};
# systemd.user = {
# services.wallpaperRandomizer = {
# Install = {WantedBy = ["graphical-session.target"];};
# Unit = {
# Description = "Set random desktop background using hyprpaper";
# After = ["graphical-session-pre.target"];
# PartOf = ["graphical-session.target"];
# };
# Service = {
# Type = "oneshot";
# ExecStart = "${wallpaperRandomizer}/bin/wallpaperRandomizer";
# IOSchedulingClass = "idle";
# };
# };
# timers.wallpaperRandomizer = {
# Unit = {Description = "Set random desktop background using hyprpaper on an interval";};
# Timer = {OnUnitActiveSec = "6h";};
# Install = {WantedBy = ["timers.target"];};
# };
# };
}

View File

@@ -0,0 +1,331 @@
{inputs, pkgs, lib, config, ...}:
let
cfg = config.nix-config.style;
in
{
options.nix-config.waybar = {
burninPrevention = lib.mkOption {
type = lib.types.bool;
default = true;
description = "Enable burn-in prevention for Waybar";
example = ''
burninPrevention = true;
'';
};
};
config = {
# required to autoload fonts from packages installed via Home Manager
fonts.fontconfig.enable = true;
# waybar requires font-awesome
home.packages = [
pkgs.pavucontrol
];
# enable waybar
programs.waybar.enable = true;
programs.waybar = {
settings = {
mainBar = {
layer = "top";
position = "top";
margin-top = 5;
# margin-bottom = 2;
# margin-left = 5;
# margin-right = 5;
# margin between the modules
spacing = 2;
modules-left = [
"hyprland/workspaces"
"hyprland/window"
];
modules-center = [
"clock"
"custom/notification"
];
modules-right = [
"tray"
"privacy"
"network"
"bluetooth"
"wireplumber"
"battery"
"backlight"
"idle_inhibitor"
];
# module specific settings
"hyprland/workspaces" = {
format = "{icon}";
format-icons = {
active = "";
default = "";
};
};
"hyprland/window"= {
"icon" = true;
"separate-outputs" = true;
"format" = "{}";
"rewrite" = {
"(.*) Mozilla Firefox" = "$1";
"(.*) Zen Browser" = "$1";
"(.*) - fish" = "> [$1]";
"(.*) - Visual Studio Code" = "$1";
};
};
"clock" = {
format = "{:%H:%M}";
interval = 1;
tooltip-format = "{calendar}";
# calendar = {
# format = "%Y-%m-%d\n󰃰 %A\n\n%H:%M";
# start-day = 1; # Monday
# first-weekday = 1; # Monday
# week-number = false;
# long-weekdays = true;
# hide-if-empty = false;
# };
};
"idle_inhibitor" = {
format = "{icon}";
format-icons = {
activated = "";
deactivated = "";
};
tooltip = "true";
};
"bluetooth" = {
format-on = "󰂯";
format-off = "󰂲";
format-disabled = "󰂲";
format-connected-battery = "{device_battery_percentage}% 󰂯";
format-alt = "{device_alias} 󰂯";
tooltip-format = "{controller_alias}\t{controller_address}\n\n{num_connections} connected";
tooltip-format-connected = "{controller_alias}\t{controller_address}\n\n{num_connections} connected\n\n{device_enumerate}";
tooltip-format-enumerate-connected = "{device_alias}\n{device_address}";
tooltip-format-enumerate-connected-battery = "{device_alias}\n{device_address}\n{device_battery_percentage}%";
on-click-right = "XDG_CURRENT_DESKTOP=GNOME gnome-control-center bluetooth";
};
"battery" = {
interval = 60;
states = {
good = 80;
warning = 30;
critical = 10;
};
format = "{capacity}% {icon}";
format-charging = "{capacity}% 󰂄";
format-plugged = "{capacity}% 󰂄";
format-icons = [ "󰁻" "󰁼" "󰁾" "󰂀" "󰂂" "󰁹" ];
};
"backlight" = {
# format = "{percent}% {icon}";
format = "{icon}";
tooltip-format = "{percent}%";
format-icons = [ "" "" "" "" "" "" "" "" "" ];
};
"wireplumber" = {
scroll-step = 1;
format = "{volume}% {icon}";# {format_source}";
format-bluetooth = "{volume}% {icon}";# {format_source}";
format-bluetooth-muted = " {icon}";# {format_source}";
format-muted = "";# {format_source}";
format-alt = "{format_source} {icon}";
# format-source = " {volume}%";
# format-source-muted = "";
format-icons = {
headphone = "";
hands-free = "";
headset = "";
phone = "";
portable = "";
default = [
""
""
""
];
};
on-click = "wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle";
on-click-right = "XDG_CURRENT_DESKTOP=GNOME gnome-control-center sound";
};
"memory" = {
interval = 5;
format = "󰍛 {}%";
max-length = 10;
};
"tray" = {
spacing = 5;
};
"custom/notification" = {
format = "{icon} {}";
format-icons = {
notification = "<span foreground='red'><sup></sup></span>";
none = "";
dnd-notification = "<span foreground='red'><sup></sup></span>";
dnd-none = "";
inhibited-notification = "<span foreground='red'><sup></sup></span>";
inhibited-none = "";
dnd-inhibited-notification = "<span foreground='red'><sup></sup></span>";
dnd-inhibited-none = "";
};
return-type = "json";
exec-if = "which swaync-client";
exec = "swaync-client -swb";
on-click = "swaync-client -t -sw";
on-click-right = "swaync-client -d -sw";
escape = true;
};
"network" = {
format = "󰤭";
format-ethernet = " {ipaddr}";
format-wifi = "{icon}";
format-icons = [ "󰤯" "󰤟" "󰤢" "󰤥" "󰤨" ];
format-disconnected = "󰤭";
tooltip-format = " {ifname} via {gwaddr}";
tooltip-format-wifi = ''
󰤨 {essid}({signalStrength}%), {frequency} GHz (Interface: {ifname})
IP: {ipaddr} GW: {gwaddr}
<span color='#a6da95'>{bandwidthUpBits}</span> <span color='#ee99a0'>{bandwidthDownBits}</span> <span color='#c6a0f6'>󰹹{bandwidthTotalBits}</span>
'';
tooltip-format-ethernet = ''
{ifname} - {ipaddr}/{cidr}
<span color='#a6da95'>{bandwidthUpBits}</span> <span color='#ee99a0'>{bandwidthDownBits}</span> <span color='#c6a0f6'>󰹹{bandwidthTotalBits}</span>
'';
tooltip-format-disconnected = "Disconnected";
on-click = "XDG_CURRENT_DESKTOP=GNOME gnome-control-center wifi";
};
"privacy" = {
icon-spacing = 4;
# icon-size" = 18;
transition-duration = 250;
modules = [
{
type = "screenshare";
tooltip = true;
# tooltip-icon-size = 24
}
{
type = "audio-out";
tooltip = true;
# tooltip-icon-size = 24
}
{
type = "audio-in";
tooltip = true;
# tooltip-icon-size = 24
}
];
};
};
};
style = ''
* {
font-family: "${cfg.monospaceFont}";
font-weight: bold;
font-size: ${builtins.toString (cfg.fontSizes.desktop + 5)}px;
}
window#waybar {
background-color: transparent;
}
.module {
background: rgba(0, 0, 0, 0.6);
color: white;
border-radius: 7px;
margin: 1px 3px;
padding: 1px 6px;
animation: bgFade 3600s infinite alternate, textColorFade 3600s infinite alternate;
}
box.module button:hover {
box-shadow: inset 0 -3px #ffffff;
}
/*.modules-left {
padding: 3px;
}
.modules-right {
padding: 3px;
}
.modules-center {
padding: 3px;
}*/
#workspaces button {
color: white;
background: none;
animation: textColorFade 3600s infinite alternate;
}
#battery.warning {
background:rgba(240, 165, 0, 0.6);
}
#battery.critical {
background:rgba(255, 0, 0, 0.6);
}
#battery.charging {
background-color:rgba(14, 173, 0, 0.6);
}
#privacy {
color: #ffffff;
background:rgba(240, 165, 0, 0.6);
border-radius: 7px;
margin: 1px 3px;
padding: 1px 6px;
}
@keyframes bgFade {
0% {
background-color: white;
}
100% {
background-color: black;
}
}
@keyframes textColorFade {
0% {
color: black;
}
/* 45% {
color: black;
} */
60% {
color: rgb(29, 38, 96);
}
/* 55% {
color: white;
} */
100% {
color: white;
}
}
'';
};
};
}

View File

@@ -3,5 +3,4 @@
home.packages = [
pkgs.keepassxc
];
}

View 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";
};
};
}

View File

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

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

View File

@@ -0,0 +1,110 @@
{ config, pkgs, lib, ... }:
let
cfg = config.nix-config.style;
in
{
services.swaync = {
enable = true;
settings = {
control-center-margin-top = 13;
control-center-margin-bottom = 0;
control-center-margin-right = 14;
control-center-margin-left = 0;
notification-2fa-action = true;
notification-inline-replies = true;
notification-icon-size = 48;
notification-body-image-height = 160;
notification-body-image-width = 200;
notification-window-width = 400;
timeout = 6;
timeout-low = 3;
timeout-critical = 0;
image-visibility = "when-available";
transition-time = 200;
hide-on-clear = false;
hide-on-action = true;
script-fail-notify = true;
widgets = [
"dnd"
"buttons-grid"
"mpris"
"volume"
"backlight"
"title"
"notifications"
];
widget-config = {
title = {
text = "Notifications";
clear-all-button = true;
button-text = "";
};
dnd = {
text = "Do Not Disturb";
};
label = {
max-lines = 1;
text = "Notification";
};
mpris = {
image-size = 50;
image-radius = 0;
};
volume = {
label = "";
};
backlight = {
label = "󰃠";
device = "amdgpu_bl2";
};
buttons-grid = {
actions = [
{
label = "";
command = "wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle";
type = "toggle";
}
{
label = "";
command = "wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle";
type = "toggle";
}
{
label = "󰤨";
command = "nm-connection-editor";
}
{
label = "󰂯";
command = "blueman-manager";
}
{
label = "󱡽";
command = "bash -c $HOME/.config/hypr/scripts/airplaneMode.sh";
type = "toggle";
}
{
label = "";
command = "shutdown now";
}
{
label = "";
command = "hyprlock";
}
{
label = "";
command = "~/.config/hypr/scripts/wlogout.sh";
}
];
};
};
};
style = ''
* {
font-family: "monospace";
}
'';
};
}

View File

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

View File

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

View File

@@ -0,0 +1,36 @@
{
config,
inputs,
lib,
pkgs,
builtins,
...
}:
let
cfg = config.nix-config.quickshell;
qs = inputs.quickshell.packages.x86_64-linux.default;
in
{
options.nix-config.quickshell.enable = lib.mkEnableOption {
name = "quickshell";
description = "Whether to enable quickshell.";
default = true;
};
config = lib.mkIf cfg.enable {
home.packages = [
qs
pkgs.qt6.qtimageformats
pkgs.qt6.qt5compat
pkgs.qt6.qtmultimedia
pkgs.qt6.qtdeclarative
pkgs.qt6.qtsvg
pkgs.qt6.qtwayland
pkgs.qt6.qtbase
];
# add the quickshell config (whole directory) to XDG_CONFIG_HOME
# home.file.".config/quickshell/config".source = ./config;
};
}

View File

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

View 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-emoji;
name = "Noto Color Emoji";
};
sizes = {
applications = cfg.fontSizes.applications;
desktop = cfg.fontSizes.desktop;
popups = cfg.fontSizes.popups;
terminal = cfg.fontSizes.terminal;
};
};
opacity = {
applications = 1.0;
desktop = 1.0;
popups = 0.9;
terminal = cfg.terminalOpacity;
};
base16Scheme = {
scheme = "onelight";
author = "https://github.com/one-dark";
base00 = "#fafafa";
base01 = "#f4f4f4";
base02 = "#e5e5e6";
base03 = "#dfdfe0";
base04 = "#d7d7d8";
base05 = "#383a42";
base06 = "#202227";
base07 = "#090a0b";
base08 = "#d84a3d";
base09 = "#a626a4";
base0A = "#c18401";
base0B = "#50a14f";
base0C = "#0070a8";
base0D = "#4078f2";
base0E = "#a626a4";
base0F = "#986801";
};
targets = {
hyprpaper.enable = true;
hyprlock.enable = true;
# disabled because they overwrite too many settings
# gnome
# wofi
# vscode
# waybar
# kitty
fontconfig.enable = true;
font-packages.enable = true;
};
};
# https://pltanton.dev/posts/2024/02/nix-based-dark-light-theme-switch/
home.packages = [
(lib.lowPrio (pkgs.writeShellApplication {
name = "toggle-theme";
runtimeInputs = with pkgs; [ home-manager coreutils ripgrep ];
text =
''
"$(home-manager generations | head -1 | rg -o '/[^ ]*')"/specialisation/light-theme/activate
echo "Switched to light theme"
'';
}))
];
specialisation.light-theme.configuration = {
stylix = {
polarity = "light";
};
home.packages = [
(lib.hiPrio (pkgs.writeShellApplication {
name = "toggle-theme";
runtimeInputs = with pkgs; [ home-manager coreutils ripgrep ];
text =
''
"$(home-manager generations | head -2 | tail -1 | rg -o '/[^ ]*')"/activate
echo "Switched to dark theme"
'';
}))
];
};
};
}

View File

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

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

View 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
View 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
View 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";
# };
# };
}

View 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
View File

@@ -0,0 +1,3 @@
{
nix.settings.experimental-features = [ "nix-command" "flakes" ];
}

View File

@@ -1,9 +1,9 @@
{
config,
lib,
pkgs,
...
config,
lib,
pkgs,
...
}:
{
services.flatpak.enable = true;
services.flatpak.enable = true;
}

11
modules/nixos/fonts.nix Normal file
View 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;
}

View File

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

35
modules/nixos/gnome.nix Normal file
View File

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

View File

@@ -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.xserver.displayManager.gdm = {
enable = true;
wayland = true;
};
services.gvfs.enable = true;
security.pam.services.hyprlock = {};
security.pam.services.gdm.enableGnomeKeyring = true;
# Enable RTKit for real-time audio processing, ...
# improving audio performance and reducing dropouts.
security.rtkit.enable = true;
# Enable D-Bus for inter-process communication
services.dbus.enable = true;
programs.dconf.enable = true;
};
}

View 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
View File

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

View File

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

10
modules/nixos/nh.nix Normal file
View File

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

View File

@@ -1,64 +1,70 @@
{
config,
lib,
pkgs,
...
config,
lib,
pkgs,
...
}:
{
# Enable OpenGL
hardware.opengl = {
enable = true;
};
# Allow to use the nvidia driver in the special case
# Use in the boot menu
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
services.xserver.videoDrivers = ["nvidia"];
prime = {
sync.enable = true;
nvidiaBusId = "PCI:1:0:0";
intelBusId = "PCI:0:2:0";
};
hardware.nvidia = {
# manually specify the driver version
package = config.boot.kernelPackages.nvidiaPackages.mkDriver {
version = "555.58.02";
sha256_64bit = "sha256-xctt4TPRlOJ6r5S54h5W6PT6/3Zy2R4ASNFPu8TSHKM=";
sha256_aarch64 = "sha256-8hyRiGB+m2hL3c9MDA/Pon+Xl6E788MZ50WrrAGUVuY=";
openSha256 = "sha256-8hyRiGB+m2hL3c9MDA/Pon+Xl6E788MZ50WrrAGUVuY=";
settingsSha256 = "sha256-ZpuVZybW6CFN/gz9rx+UJvQ715FZnAOYfHn5jt5Z2C8=";
persistencedSha256 = "sha256-xctt4TPRlOJ6r5S54h5W6PT6/3Zy2R4ASNFPu8TSHKM=";
package = config.boot.kernelPackages.nvidiaPackages.mkDriver {
version = "575.51.02";
sha256_64bit = "sha256-XZ0N8ISmoAC8p28DrGHk/YN1rJsInJ2dZNL8O+Tuaa0=";
openSha256 = "sha256-NQg+QDm9Gt+5bapbUO96UFsPnz1hG1dtEwT/g/vKHkw=";
settingsSha256 = "sha256-6n9mVkEL39wJj5FB1HBml7TTJhNAhS/j5hqpNGFQE4w=";
usePersistenced = false;
};
};
# 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
# reverseSync.enable = true;
# # Enable if using an external GPU
# allowExternalGpu = false;
# In the global configuration, we blacklist the nouveau driver and load the nvidia driver
boot.extraModprobeConfig = ''
blacklist nouveau
options nouveau modeset=0
'';
## Alternatively enable offloading
offload = {
enable = true;
enableOffloadCmd = true;
};
};
services.udev.extraRules = ''
# Remove NVIDIA USB xHCI Host Controller devices, if present
ACTION=="add", SUBSYSTEM=="pci", ATTR{vendor}=="0x10de", ATTR{class}=="0x0c0330", ATTR{power/control}="auto", ATTR{remove}="1"
# 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" ];
}

View File

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

View File

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

95
modules/nixos/power.nix Normal file
View File

@@ -0,0 +1,95 @@
{
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 = {
# services.tlp = {
# enable = true;
# settings = {
# # processor chooses frequencies itself but respects the limits set by the user
# CPU_DRIVER_OPMODE_ON_AC = "guided";
# CPU_DRIVER_OPMODE_ON_BAT = "guided";
# # governor dictates global behavior of the CPU
# CPU_SCALING_GOVERNOR_ON_BAT = "powersave";
# CPU_SCALING_GOVERNOR_ON_AC = "performance";
# # energy performance policy (EPP) sets the energy/performance balance
# CPU_ENERGY_PERF_POLICY_ON_BAT = "balance_power";
# CPU_ENERGY_PERF_POLICY_ON_AC = "performance";
# # clock speeds reported by `sudo tlp-stat`
# # 623377 [kHz] and 5090910 [kHz]
# # CPU_SCALING_MIN_FREQ_ON_AC = 623377;
# # CPU_SCALING_MAX_FREQ_ON_AC = 5090910;
# # CPU_SCALING_MIN_FREQ_ON_BAT = 0;
# # # reduce max frequency on battery to save power
# # CPU_SCALING_MAX_FREQ_ON_BAT = 3000000;
# # Allow the CPU to boost
# CPU_BOOST_ON_AC = 1;
# CPU_BOOST_ON_BAT = 1;
# RADEON_DPM_PERF_LEVEL_ON_AC = "high";
# WIFI_PWR_ON_BAT = "off";
# # enable battery charge thresholds on the default battery
# STOP_CHARGE_THRESH_BAT0 = 1;
# };
# };
systemd.sleep.extraConfig = ''
AllowSuspend=yes
AllowHibernation=yes
AllowHybridSleep=yes
AllowSuspendThenHibernate=yes
'';
services.watt = {
enable = true;
settings = {
battery_charge_thresholds = [
40
80
];
};
};
# write the watt-config under /etc/watt.toml
services.irqbalance = {
enable = true;
};
services.thermald = {
enable = true;
};
};
}

33
modules/nixos/stylix.nix Normal file
View 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
View 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

Submodule secrets added at 2aef0ad374

View File

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

Binary file not shown.

View File

@@ -1,19 +1,5 @@
{ 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.stateVersion = "24.05";
# Let Home Manager install and manage itself.
@@ -23,38 +9,36 @@ with lib.hm.gvariant;
home.username = "remy";
home.homeDirectory = "/home/remy";
#home.file.<filepath> = <content>;
## Utils relevant to this user only
programs.git = {
enable = true;
userName = "Remy Moll";
userEmail = "me@moll.re";
};
## Gnome keyboard and mouse settings
dconf.settings = {
# 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" ];
};
## XDG configuration
xdg = {
"org/gnome/desktop/peripherals/keyboard" = {
numlock-state = true;
};
"org/gnome/desktop/peripherals/mouse" = {
natural-scroll = false;
speed = 0.20851063829787231;
};
"org/gnome/desktop/peripherals/touchpad" = {
tap-to-click = true;
two-finger-scrolling-enabled = true;
speed = 0.16872427983539096;
mimeApps = {
enable = true;
defaultApplications = {
"inode/directory" = "org.gnome.Nautilus.desktop";
"application/zip" = "org.gnome.FileRoller.desktop";
"application/octet-stream" = "org.gnome.GHex.desktop";
# pdfs
"application/pdf" = "org.gnome.Evince.desktop";
# links
"x-scheme-handler/https" = "firefox.desktop"; # Links
"x-scheme-handler/http" = "firefox.desktop"; # Links
# images
# "image/png" = "org.gnome.Evince.desktop";
# "image/jpeg" = "org.gnome.Evince.desktop";
# "image/gif" = "org.gnome.Evince.desktop";
# "image/svg+xml" = "org.gnome.Evince.desktop";
# "image/tiff" = "org.gnome.Evince.desktop";
# text-based
"text/*" = "vscode.desktop";
};
};
};
}

View File

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

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

View File

@@ -0,0 +1,45 @@
{ config, nixpkgs, lib, ... }:
with lib.hm.gvariant;
{
config = {
nix-config = {
hypr = {
internal-screen = {
resolution = "2944x1840@90.00";
scale = "1.6";
};
};
quickshell = {
enable = true;
};
};
};
imports = [
../remy.nix
../../modules/home-manager/browser.nix
../../modules/home-manager/code.nix
../../modules/home-manager/dev.nix
../../modules/home-manager/directories.nix
../../modules/home-manager/documents.nix
../../modules/home-manager/fish.nix
../../modules/home-manager/flatpaks.nix
../../modules/home-manager/fusuma.nix
../../modules/home-manager/hypr
../../modules/home-manager/keepassxc.nix
../../modules/home-manager/kitty.nix
../../modules/home-manager/kubectl.nix
../../modules/home-manager/launcher.nix
../../modules/home-manager/notifications.nix
../../modules/home-manager/obsidian.nix
../../modules/home-manager/owncloud-client.nix
../../modules/home-manager/quickshell
../../modules/home-manager/ssh.nix
../../modules/home-manager/stylix.nix
../../modules/home-manager/thunderbird.nix
../../modules/home-manager/uxplay.nix
# ../../modules/home-manager/wofi.nix
../../modules/home-manager/xdg-portals.nix
];
}

View File

@@ -11,12 +11,15 @@
# also add mirrors?
# "https://mirrors.ustc.edu.cn/nix-channels/store"
"https://cache.nixos.org"
"https://hyprland.cachix.org"
];
trusted-public-keys = [
# the default public key of cache.nixos.org, it's built-in, no need to add it here
"cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY="
"hyprland.cachix.org-1:a7pgxzMz7+chwVL3/pzj6jIBMioiJM7ypFP8PwtkuGc="
];
builders-use-substitutes = true;
};
}

4
utils/unfree.nix Normal file
View File

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 329 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 381 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 MiB