Been getting config files downloaded
@@ -1,72 +0,0 @@
|
|||||||
# IMPORTANT:
|
|
||||||
# Only packages/attributes that exist in Nixpkgs can be installed.
|
|
||||||
# Check names on https://search.nixos.org/packages
|
|
||||||
# A wrong package name (or attribute path) will cause the Nix build to fail.
|
|
||||||
|
|
||||||
|
|
||||||
# system
|
|
||||||
waybar
|
|
||||||
wofi
|
|
||||||
dunst
|
|
||||||
xdg-utils
|
|
||||||
desktop-file-utils
|
|
||||||
playerctl
|
|
||||||
pamixer
|
|
||||||
brightnessctl
|
|
||||||
rofi
|
|
||||||
home-manager
|
|
||||||
|
|
||||||
# browsers
|
|
||||||
brave
|
|
||||||
vivaldi
|
|
||||||
chromium
|
|
||||||
|
|
||||||
# hyprland
|
|
||||||
hyprpaper
|
|
||||||
|
|
||||||
# utils
|
|
||||||
wget
|
|
||||||
flatpak
|
|
||||||
nextcloud-client
|
|
||||||
kdePackages.okular
|
|
||||||
kdePackages.gwenview
|
|
||||||
kdePackages.kdeconnect-kde
|
|
||||||
_1password-gui
|
|
||||||
|
|
||||||
docker
|
|
||||||
tree
|
|
||||||
ripgrep
|
|
||||||
gparted
|
|
||||||
file
|
|
||||||
htop
|
|
||||||
wev
|
|
||||||
solaar
|
|
||||||
|
|
||||||
# terminal
|
|
||||||
kitty
|
|
||||||
starship
|
|
||||||
kdePackages.konsole
|
|
||||||
kdePackages.yakuake
|
|
||||||
|
|
||||||
# office
|
|
||||||
obsidian
|
|
||||||
onlyoffice-desktopeditors
|
|
||||||
|
|
||||||
# development
|
|
||||||
git
|
|
||||||
vscode-with-extensions
|
|
||||||
kdePackages.kate
|
|
||||||
jetbrains.pycharm
|
|
||||||
python3
|
|
||||||
|
|
||||||
# communication
|
|
||||||
nextcloud-talk-desktop
|
|
||||||
signal-desktop
|
|
||||||
|
|
||||||
# multimedia
|
|
||||||
spotify
|
|
||||||
vlc
|
|
||||||
|
|
||||||
# graphic
|
|
||||||
gimp2
|
|
||||||
|
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
app.zen_browser.zen
|
|
||||||
com.github.tchx84.Flatseal
|
|
||||||
eu.betterbird.Betterbird
|
|
||||||
com.todoist.Todoist
|
|
||||||
@@ -1,71 +0,0 @@
|
|||||||
# IMPORTANT:
|
|
||||||
# Only packages/attributes that exist in Nixpkgs can be installed.
|
|
||||||
# Check names on https://search.nixos.org/packages
|
|
||||||
# A wrong package name (or attribute path) will cause the Nix build to fail.
|
|
||||||
|
|
||||||
|
|
||||||
# system
|
|
||||||
waybar
|
|
||||||
wofi
|
|
||||||
dunst
|
|
||||||
xdg-utils
|
|
||||||
desktop-file-utils
|
|
||||||
playerctl
|
|
||||||
pamixer
|
|
||||||
brightnessctl
|
|
||||||
rofi
|
|
||||||
home-manager
|
|
||||||
|
|
||||||
# browsers
|
|
||||||
brave
|
|
||||||
vivaldi
|
|
||||||
chromium
|
|
||||||
|
|
||||||
# hyprland
|
|
||||||
hyprpaper
|
|
||||||
|
|
||||||
# utils
|
|
||||||
wget
|
|
||||||
flatpak
|
|
||||||
nextcloud-client
|
|
||||||
kdePackages.okular
|
|
||||||
kdePackages.gwenview
|
|
||||||
kdePackages.kdeconnect-kde
|
|
||||||
_1password-gui
|
|
||||||
docker
|
|
||||||
tree
|
|
||||||
ripgrep
|
|
||||||
gparted
|
|
||||||
file
|
|
||||||
htop
|
|
||||||
wev
|
|
||||||
solaar
|
|
||||||
|
|
||||||
# terminal
|
|
||||||
kitty
|
|
||||||
starship
|
|
||||||
kdePackages.konsole
|
|
||||||
kdePackages.yakuake
|
|
||||||
|
|
||||||
# office
|
|
||||||
obsidian
|
|
||||||
onlyoffice-desktopeditors
|
|
||||||
|
|
||||||
# development
|
|
||||||
git
|
|
||||||
vscode-with-extensions
|
|
||||||
kdePackages.kate
|
|
||||||
jetbrains.pycharm
|
|
||||||
python3
|
|
||||||
|
|
||||||
# communication
|
|
||||||
nextcloud-talk-desktop
|
|
||||||
signal-desktop
|
|
||||||
|
|
||||||
# multimedia
|
|
||||||
spotify
|
|
||||||
vlc
|
|
||||||
|
|
||||||
# graphic
|
|
||||||
gimp2
|
|
||||||
|
|
||||||
@@ -1,11 +0,0 @@
|
|||||||
# Minimal Hyprland config for greetd
|
|
||||||
|
|
||||||
monitor = , preferred, auto, 1
|
|
||||||
|
|
||||||
misc {
|
|
||||||
disable_hyprland_logo = true
|
|
||||||
disable_splash_rendering = true
|
|
||||||
}
|
|
||||||
|
|
||||||
# Start qtgreet and point it at the correct session paths for NixOS
|
|
||||||
exec-once = sh -lc 'source /etc/greetd/qtgreet-session-paths; exec qtgreet -w "$WAYLAND_SESSIONS" -x "$X11_SESSIONS"'
|
|
||||||
@@ -1,130 +0,0 @@
|
|||||||
###############
|
|
||||||
###############
|
|
||||||
|
|
||||||
$mainMod = SUPER
|
|
||||||
|
|
||||||
# use walker to show exec menu
|
|
||||||
"$mainMod, Space, exec, walker"
|
|
||||||
"$mainMod, P, pseudo"
|
|
||||||
"$mainMod, J, togglesplit"
|
|
||||||
|
|
||||||
# grimblast
|
|
||||||
"$mainMod_SHIFT, p, exec, grimblast -n -f copysave active"
|
|
||||||
"$mainMod_SHIFT, a, exec, grimblast -n -f copysave area"
|
|
||||||
"$mainMod_ALT, p, exec, grimblast -n -f copysave output"
|
|
||||||
"$mainMod_CTRL, p, exec, grimblast -n -f copysave screen"
|
|
||||||
|
|
||||||
# Terminal / launcher / kill / reload
|
|
||||||
$mainMod, RETURN, exec, kitty
|
|
||||||
$mainMod, D, exec, wofi --show drun
|
|
||||||
$mainMod, Q, killactive,
|
|
||||||
$mainMod_SHIFT, Q, exit,
|
|
||||||
$mainMod_SHIFT, R, exec, hyprctl reload
|
|
||||||
"$mainMod_SHIFT, S, exec, wlogout"
|
|
||||||
|
|
||||||
# Default browser
|
|
||||||
$mainMod, W, exec, xdg-open https://about:blank
|
|
||||||
|
|
||||||
# Focus movement
|
|
||||||
$mainMod, H, movefocus, l
|
|
||||||
$mainMod, L, movefocus, r
|
|
||||||
$mainMod, K, movefocus, u
|
|
||||||
$mainMod, J, movefocus, d
|
|
||||||
$mainMod, left, movefocus, l
|
|
||||||
$mainMod, right, movefocus, r
|
|
||||||
$mainMod, up, movefocus, u
|
|
||||||
$mainMod, down, movefocus, d
|
|
||||||
# Keybindings #
|
|
||||||
|
|
||||||
# Move windows
|
|
||||||
$mainMod_SHIFT, H, movewindow, l
|
|
||||||
$mainMod_SHIFT, L, movewindow, r
|
|
||||||
$mainMod_SHIFT, K, movewindow, u
|
|
||||||
$mainMod_SHIFT, J, movewindow, d
|
|
||||||
$mainMod_SHIFT, left, movewindow, l
|
|
||||||
$mainMod_SHIFT, right, movewindow, r
|
|
||||||
$mainMod_SHIFT, up, movewindow, u
|
|
||||||
$mainMod_SHIFT, down, movewindow, d
|
|
||||||
|
|
||||||
# Resize windows
|
|
||||||
$mainMod CTRL, H, resizeactive, -30 0
|
|
||||||
$mainMod CTRL, L, resizeactive, 30 0
|
|
||||||
$mainMod CTRL, K, resizeactive, 0 -30
|
|
||||||
$mainMod CTRL, J, resizeactive, 0 30
|
|
||||||
|
|
||||||
# Floating / fullscreen
|
|
||||||
$mainMod, V, togglefloating,
|
|
||||||
$mainMod, F, fullscreen, 0
|
|
||||||
$mainMod_SHIFT, F, fullscreen, 1
|
|
||||||
|
|
||||||
# Workspaces
|
|
||||||
$mainMod, 1, workspace, 1
|
|
||||||
$mainMod, 2, workspace, 2
|
|
||||||
$mainMod, 3, workspace, 3
|
|
||||||
$mainMod, 4, workspace, 4
|
|
||||||
$mainMod, 5, workspace, 5
|
|
||||||
$mainMod, 6, workspace, 6
|
|
||||||
$mainMod, 7, workspace, 7
|
|
||||||
$mainMod, 8, workspace, 8
|
|
||||||
$mainMod, 9, workspace, 9
|
|
||||||
$mainMod, 0, workspace, 10
|
|
||||||
|
|
||||||
$mainMod_SHIFT, 1, movetoworkspace, 1
|
|
||||||
$mainMod_SHIFT, 2, movetoworkspace, 2
|
|
||||||
$mainMod_SHIFT, 3, movetoworkspace, 3
|
|
||||||
$mainMod_SHIFT, 4, movetoworkspace, 4
|
|
||||||
$mainMod_SHIFT, 5, movetoworkspace, 5
|
|
||||||
$mainMod_SHIFT, 6, movetoworkspace, 6
|
|
||||||
$mainMod_SHIFT, 7, movetoworkspace, 7
|
|
||||||
$mainMod_SHIFT, 8, movetoworkspace, 8
|
|
||||||
$mainMod_SHIFT, 9, movetoworkspace, 9
|
|
||||||
$mainMod_SHIFT, 0, movetoworkspace, 10
|
|
||||||
|
|
||||||
# Cycle workspaces
|
|
||||||
$mainMod, mouse_down, workspace, e+1
|
|
||||||
$mainMod, mouse_up, workspace, e-1
|
|
||||||
|
|
||||||
# Mouse drag
|
|
||||||
bindm = $mainMod, mouse:272, movewindow
|
|
||||||
bindm = $mainMod, mouse:273, resizewindow
|
|
||||||
|
|
||||||
#########################
|
|
||||||
# Audio (pamixer)
|
|
||||||
#########################
|
|
||||||
, XF86AudioRaiseVolume, exec, pamixer -i 5
|
|
||||||
, XF86AudioLowerVolume, exec, pamixer -d 5
|
|
||||||
, XF86AudioMute, exec, pamixer -t
|
|
||||||
, XF86AudioMicMute, exec, pamixer --default-source -t
|
|
||||||
|
|
||||||
#########################
|
|
||||||
# Media (playerctl)
|
|
||||||
#########################
|
|
||||||
, XF86AudioPlay, exec, playerctl play-pause
|
|
||||||
, XF86AudioPause, exec, playerctl pause
|
|
||||||
, XF86AudioNext, exec, playerctl next
|
|
||||||
, XF86AudioPrev, exec, playerctl previous
|
|
||||||
, XF86AudioStop, exec, playerctl stop
|
|
||||||
|
|
||||||
#########################
|
|
||||||
# Brightness (brightnessctl)
|
|
||||||
#########################
|
|
||||||
, XF86MonBrightnessUp, exec, brightnessctl set +10%
|
|
||||||
, XF86MonBrightnessDown, exec, brightnessctl set 10%-
|
|
||||||
, XF86KbdBrightnessUp, exec, brightnessctl -d '*kbd_backlight*' set +10%
|
|
||||||
, XF86KbdBrightnessDown, exec, brightnessctl -d '*kbd_backlight*' set 10%-
|
|
||||||
|
|
||||||
#########################
|
|
||||||
# Power / session
|
|
||||||
#########################
|
|
||||||
, XF86Sleep, exec, systemctl suspend
|
|
||||||
, XF86PowerOff, exec, systemctl poweroff
|
|
||||||
, XF86WakeUp, exec, systemctl suspend
|
|
||||||
|
|
||||||
|
|
||||||
#########################
|
|
||||||
# Start apps
|
|
||||||
#########################
|
|
||||||
$mainMod, E, exec, dolphin
|
|
||||||
CTRLALT, B, exec, flatpak run eu.betterbird.Betterbird
|
|
||||||
CTRLALT, S, exec, spotify
|
|
||||||
CTRLALT, z, exec, flatpak run app.zen_browser.zen
|
|
||||||
@@ -1,58 +0,0 @@
|
|||||||
|
|
||||||
# --- Variables ---
|
|
||||||
$mod = SUPER
|
|
||||||
$term = kitty
|
|
||||||
$menu = hyprshell run
|
|
||||||
|
|
||||||
|
|
||||||
# --- Environment ---
|
|
||||||
env = XDG_CURRENT_DESKTOP,Hyprland
|
|
||||||
env = XDG_SESSION_TYPE,wayland
|
|
||||||
env = XDG_SESSION_DESKTOP,Hyprland
|
|
||||||
env = MOZ_ENABLE_WAYLAND,1
|
|
||||||
|
|
||||||
# --- Monitor (safe default) ---
|
|
||||||
monitor = , preferred, auto, 1
|
|
||||||
|
|
||||||
# --- Input ---
|
|
||||||
input {
|
|
||||||
kb_layout = us
|
|
||||||
follow_mouse = 1
|
|
||||||
touchpad {
|
|
||||||
natural_scroll = true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
# --- General ---
|
|
||||||
general {
|
|
||||||
gaps_in = 5
|
|
||||||
gaps_out = 10
|
|
||||||
border_size = 2
|
|
||||||
layout = dwindle
|
|
||||||
}
|
|
||||||
|
|
||||||
animations {
|
|
||||||
enabled = true
|
|
||||||
}
|
|
||||||
|
|
||||||
decoration {
|
|
||||||
blur {
|
|
||||||
enabled = true
|
|
||||||
size = 8
|
|
||||||
passes = 2
|
|
||||||
new_optimizations = true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
misc {
|
|
||||||
disable_hyprland_logo = false
|
|
||||||
disable_splash_rendering = false
|
|
||||||
}
|
|
||||||
|
|
||||||
# --- Keybindings live here ---
|
|
||||||
source = /etc/xdg/hypr/bindings.conf
|
|
||||||
|
|
||||||
|
|
||||||
# --- Autostart ---
|
|
||||||
exec-once = waybar
|
|
||||||
#exec-once = sleep 2 & /run/current-system/sw/bin/hyprshell run
|
|
||||||
@@ -1,61 +0,0 @@
|
|||||||
# =========================
|
|
||||||
# Hyprland config (generated by Nix)
|
|
||||||
# =========================
|
|
||||||
|
|
||||||
# --- Variables ---
|
|
||||||
$mod = SUPER
|
|
||||||
$term = kitty
|
|
||||||
$menu = hyprshell run
|
|
||||||
|
|
||||||
|
|
||||||
# --- Environment ---
|
|
||||||
env = XDG_CURRENT_DESKTOP,Hyprland
|
|
||||||
env = XDG_SESSION_TYPE,wayland
|
|
||||||
env = XDG_SESSION_DESKTOP,Hyprland
|
|
||||||
env = MOZ_ENABLE_WAYLAND,1
|
|
||||||
|
|
||||||
# --- Monitor (safe default) ---
|
|
||||||
monitor = , preferred, auto, 1
|
|
||||||
|
|
||||||
# --- Input ---
|
|
||||||
input {
|
|
||||||
kb_layout = us
|
|
||||||
follow_mouse = 1
|
|
||||||
touchpad {
|
|
||||||
natural_scroll = true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
# --- General ---
|
|
||||||
general {
|
|
||||||
gaps_in = 5
|
|
||||||
gaps_out = 10
|
|
||||||
border_size = 2
|
|
||||||
layout = dwindle
|
|
||||||
}
|
|
||||||
|
|
||||||
animations {
|
|
||||||
enabled = true
|
|
||||||
}
|
|
||||||
|
|
||||||
decoration {
|
|
||||||
blur {
|
|
||||||
enabled = false
|
|
||||||
size = 8
|
|
||||||
passes = 2
|
|
||||||
new_optimizations = true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
misc {
|
|
||||||
disable_hyprland_logo = false
|
|
||||||
disable_splash_rendering = false
|
|
||||||
}
|
|
||||||
|
|
||||||
# --- Keybindings live here ---
|
|
||||||
source = /etc/xdg/hypr/bindings.conf
|
|
||||||
|
|
||||||
|
|
||||||
# --- Autostart ---
|
|
||||||
exec-once = waybar
|
|
||||||
#exec-once = sleep 2 & /run/current-system/sw/bin/hyprshell run
|
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
Host *
|
|
||||||
AddKeysToAgent yes
|
|
||||||
ServerAliveInterval 30
|
|
||||||
ServerAliveCountMax 3
|
|
||||||
@@ -1,17 +0,0 @@
|
|||||||
alias ll='ls -lah'
|
|
||||||
alias gs='git status'
|
|
||||||
alias ga='git add'
|
|
||||||
alias gc='git commit'
|
|
||||||
alias reb-switch='cd ~/nixos && sudo nixos-rebuild switch --flake ~/nixos#traveldroid'
|
|
||||||
alias reb-test='cd ~/nixos && sudo nixos-rebuild test --flake ~/nixos#traveldroid'
|
|
||||||
alias reb-vm='cd ~/nixos && sudo nixos-rebuild build-vm --flake ~/nixos#traveldroid && "$(ls -1 ./result/bin/run-*-vm | head -n 1)"'
|
|
||||||
alias rb='systemctl reboot'
|
|
||||||
alias po='systemctl poweroff'
|
|
||||||
alias fpl='flatpak search'
|
|
||||||
alias fpi='flatpak install'
|
|
||||||
alias fpr='flatpak run'
|
|
||||||
alias nxc='ssh henrov@nextcloud.data-pro.nu'
|
|
||||||
alias nps='xdg-open https://search.nixos.org'
|
|
||||||
alias vs='code'
|
|
||||||
alias saveme='sudo nix-env -p /nix/var/nix/profiles/system --set /nix/var/nix/profiles/system-123-link && sudo /nix/var/nix/profiles/system/bin/switch-to-configuration boot'
|
|
||||||
|
|
||||||
@@ -1,12 +0,0 @@
|
|||||||
# ~/nixos/files/conf/terminal/kitty.conf
|
|
||||||
# Kitty config (https://sw.kovidgoyal.net/kitty/conf/)
|
|
||||||
#
|
|
||||||
# Edit freely; NixOS will inject this file verbatim via programs.kitty.extraConfig.
|
|
||||||
|
|
||||||
# Example baseline settings:
|
|
||||||
background_opacity 0.60
|
|
||||||
dynamic_background_opacity yes
|
|
||||||
|
|
||||||
# Suggested: allow ctrl+shift+v paste (many distros default this already)
|
|
||||||
map ctrl+shift+v paste_from_clipboard
|
|
||||||
map ctrl+shift+c copy_to_clipboard
|
|
||||||
@@ -1,279 +0,0 @@
|
|||||||
"$schema" = 'https://starship.rs/config-schema.json'
|
|
||||||
|
|
||||||
format = """
|
|
||||||
[](red)\
|
|
||||||
$os\
|
|
||||||
$username\
|
|
||||||
[](bg:peach fg:red)\
|
|
||||||
$directory\
|
|
||||||
[](bg:yellow fg:peach)\
|
|
||||||
$git_branch\
|
|
||||||
$git_status\
|
|
||||||
[](fg:yellow bg:green)\
|
|
||||||
$c\
|
|
||||||
$rust\
|
|
||||||
$golang\
|
|
||||||
$nodejs\
|
|
||||||
$php\
|
|
||||||
$java\
|
|
||||||
$kotlin\
|
|
||||||
$haskell\
|
|
||||||
$python\
|
|
||||||
[](fg:green bg:sapphire)\
|
|
||||||
$conda\
|
|
||||||
[](fg:sapphire bg:lavender)\
|
|
||||||
$time\
|
|
||||||
[ ](fg:lavender)\
|
|
||||||
$cmd_duration\
|
|
||||||
$line_break\
|
|
||||||
$character"""
|
|
||||||
|
|
||||||
palette = 'catppuccin_mocha'
|
|
||||||
|
|
||||||
[os]
|
|
||||||
disabled = false
|
|
||||||
style = "bg:red fg:crust"
|
|
||||||
|
|
||||||
[os.symbols]
|
|
||||||
Windows = ""
|
|
||||||
Ubuntu = ""
|
|
||||||
SUSE = ""
|
|
||||||
Raspbian = ""
|
|
||||||
Mint = ""
|
|
||||||
Macos = ""
|
|
||||||
Manjaro = ""
|
|
||||||
Linux = ""
|
|
||||||
Gentoo = ""
|
|
||||||
Fedora = ""
|
|
||||||
Alpine = ""
|
|
||||||
Amazon = ""
|
|
||||||
Android = ""
|
|
||||||
AOSC = ""
|
|
||||||
Arch = ""
|
|
||||||
Artix = ""
|
|
||||||
CentOS = ""
|
|
||||||
Debian = ""
|
|
||||||
Redhat = ""
|
|
||||||
RedHatEnterprise = ""
|
|
||||||
|
|
||||||
[username]
|
|
||||||
show_always = true
|
|
||||||
style_user = "bg:red fg:crust"
|
|
||||||
style_root = "bg:red fg:crust"
|
|
||||||
format = '[ $user]($style)'
|
|
||||||
|
|
||||||
[directory]
|
|
||||||
style = "bg:peach fg:crust"
|
|
||||||
format = "[ $path ]($style)"
|
|
||||||
truncation_length = 3
|
|
||||||
truncation_symbol = "…/"
|
|
||||||
|
|
||||||
[directory.substitutions]
|
|
||||||
"Documents" = " "
|
|
||||||
"Downloads" = " "
|
|
||||||
"Music" = " "
|
|
||||||
"Pictures" = " "
|
|
||||||
"Developer" = " "
|
|
||||||
|
|
||||||
[git_branch]
|
|
||||||
symbol = ""
|
|
||||||
style = "bg:yellow"
|
|
||||||
format = '[[ $symbol $branch ](fg:crust bg:yellow)]($style)'
|
|
||||||
|
|
||||||
[git_status]
|
|
||||||
style = "bg:yellow"
|
|
||||||
format = '[[($all_status$ahead_behind )](fg:crust bg:yellow)]($style)'
|
|
||||||
|
|
||||||
[nodejs]
|
|
||||||
symbol = ""
|
|
||||||
style = "bg:green"
|
|
||||||
format = '[[ $symbol( $version) ](fg:crust bg:green)]($style)'
|
|
||||||
|
|
||||||
[c]
|
|
||||||
symbol = " "
|
|
||||||
style = "bg:green"
|
|
||||||
format = '[[ $symbol( $version) ](fg:crust bg:green)]($style)'
|
|
||||||
|
|
||||||
[rust]
|
|
||||||
symbol = ""
|
|
||||||
style = "bg:green"
|
|
||||||
format = '[[ $symbol( $version) ](fg:crust bg:green)]($style)'
|
|
||||||
|
|
||||||
[golang]
|
|
||||||
symbol = ""
|
|
||||||
style = "bg:green"
|
|
||||||
format = '[[ $symbol( $version) ](fg:crust bg:green)]($style)'
|
|
||||||
|
|
||||||
[php]
|
|
||||||
symbol = ""
|
|
||||||
style = "bg:green"
|
|
||||||
format = '[[ $symbol( $version) ](fg:crust bg:green)]($style)'
|
|
||||||
|
|
||||||
[java]
|
|
||||||
symbol = " "
|
|
||||||
style = "bg:green"
|
|
||||||
format = '[[ $symbol( $version) ](fg:crust bg:green)]($style)'
|
|
||||||
|
|
||||||
[kotlin]
|
|
||||||
symbol = ""
|
|
||||||
style = "bg:green"
|
|
||||||
format = '[[ $symbol( $version) ](fg:crust bg:green)]($style)'
|
|
||||||
|
|
||||||
[haskell]
|
|
||||||
symbol = ""
|
|
||||||
style = "bg:green"
|
|
||||||
format = '[[ $symbol( $version) ](fg:crust bg:green)]($style)'
|
|
||||||
|
|
||||||
[python]
|
|
||||||
symbol = ""
|
|
||||||
style = "bg:green"
|
|
||||||
format = '[[ $symbol( $version)(\(#$virtualenv\)) ](fg:crust bg:green)]($style)'
|
|
||||||
|
|
||||||
[docker_context]
|
|
||||||
symbol = ""
|
|
||||||
style = "bg:sapphire"
|
|
||||||
format = '[[ $symbol( $context) ](fg:crust bg:sapphire)]($style)'
|
|
||||||
|
|
||||||
[conda]
|
|
||||||
symbol = " "
|
|
||||||
style = "fg:crust bg:sapphire"
|
|
||||||
format = '[$symbol$environment ]($style)'
|
|
||||||
ignore_base = false
|
|
||||||
|
|
||||||
[time]
|
|
||||||
disabled = false
|
|
||||||
time_format = "%R"
|
|
||||||
style = "bg:lavender"
|
|
||||||
format = '[[ $time ](fg:crust bg:lavender)]($style)'
|
|
||||||
|
|
||||||
[line_break]
|
|
||||||
disabled = false
|
|
||||||
|
|
||||||
[character]
|
|
||||||
disabled = false
|
|
||||||
success_symbol = '[❯](bold fg:green)'
|
|
||||||
error_symbol = '[❯](bold fg:red)'
|
|
||||||
vimcmd_symbol = '[❮](bold fg:green)'
|
|
||||||
vimcmd_replace_one_symbol = '[❮](bold fg:lavender)'
|
|
||||||
vimcmd_replace_symbol = '[❮](bold fg:lavender)'
|
|
||||||
vimcmd_visual_symbol = '[❮](bold fg:yellow)'
|
|
||||||
|
|
||||||
[cmd_duration]
|
|
||||||
show_milliseconds = true
|
|
||||||
format = " in $duration "
|
|
||||||
style = "bg:lavender"
|
|
||||||
disabled = false
|
|
||||||
show_notifications = true
|
|
||||||
min_time_to_notify = 45000
|
|
||||||
|
|
||||||
[palettes.catppuccin_mocha]
|
|
||||||
rosewater = "#f5e0dc"
|
|
||||||
flamingo = "#f2cdcd"
|
|
||||||
pink = "#f5c2e7"
|
|
||||||
mauve = "#cba6f7"
|
|
||||||
red = "#f38ba8"
|
|
||||||
maroon = "#eba0ac"
|
|
||||||
peach = "#fab387"
|
|
||||||
yellow = "#f9e2af"
|
|
||||||
green = "#a6e3a1"
|
|
||||||
teal = "#94e2d5"
|
|
||||||
sky = "#89dceb"
|
|
||||||
sapphire = "#74c7ec"
|
|
||||||
blue = "#89b4fa"
|
|
||||||
lavender = "#b4befe"
|
|
||||||
text = "#cdd6f4"
|
|
||||||
subtext1 = "#bac2de"
|
|
||||||
subtext0 = "#a6adc8"
|
|
||||||
overlay2 = "#9399b2"
|
|
||||||
overlay1 = "#7f849c"
|
|
||||||
overlay0 = "#6c7086"
|
|
||||||
surface2 = "#585b70"
|
|
||||||
surface1 = "#45475a"
|
|
||||||
surface0 = "#313244"
|
|
||||||
base = "#1e1e2e"
|
|
||||||
mantle = "#181825"
|
|
||||||
crust = "#11111b"
|
|
||||||
|
|
||||||
[palettes.catppuccin_frappe]
|
|
||||||
rosewater = "#f2d5cf"
|
|
||||||
flamingo = "#eebebe"
|
|
||||||
pink = "#f4b8e4"
|
|
||||||
mauve = "#ca9ee6"
|
|
||||||
red = "#e78284"
|
|
||||||
maroon = "#ea999c"
|
|
||||||
peach = "#ef9f76"
|
|
||||||
yellow = "#e5c890"
|
|
||||||
green = "#a6d189"
|
|
||||||
teal = "#81c8be"
|
|
||||||
sky = "#99d1db"
|
|
||||||
sapphire = "#85c1dc"
|
|
||||||
blue = "#8caaee"
|
|
||||||
lavender = "#babbf1"
|
|
||||||
text = "#c6d0f5"
|
|
||||||
subtext1 = "#b5bfe2"
|
|
||||||
subtext0 = "#a5adce"
|
|
||||||
overlay2 = "#949cbb"
|
|
||||||
overlay1 = "#838ba7"
|
|
||||||
overlay0 = "#737994"
|
|
||||||
surface2 = "#626880"
|
|
||||||
surface1 = "#51576d"
|
|
||||||
surface0 = "#414559"
|
|
||||||
base = "#303446"
|
|
||||||
mantle = "#292c3c"
|
|
||||||
crust = "#232634"
|
|
||||||
|
|
||||||
[palettes.catppuccin_latte]
|
|
||||||
rosewater = "#dc8a78"
|
|
||||||
flamingo = "#dd7878"
|
|
||||||
pink = "#ea76cb"
|
|
||||||
mauve = "#8839ef"
|
|
||||||
red = "#d20f39"
|
|
||||||
maroon = "#e64553"
|
|
||||||
peach = "#fe640b"
|
|
||||||
yellow = "#df8e1d"
|
|
||||||
green = "#40a02b"
|
|
||||||
teal = "#179299"
|
|
||||||
sky = "#04a5e5"
|
|
||||||
sapphire = "#209fb5"
|
|
||||||
blue = "#1e66f5"
|
|
||||||
lavender = "#7287fd"
|
|
||||||
text = "#4c4f69"
|
|
||||||
subtext1 = "#5c5f77"
|
|
||||||
subtext0 = "#6c6f85"
|
|
||||||
overlay2 = "#7c7f93"
|
|
||||||
overlay1 = "#8c8fa1"
|
|
||||||
overlay0 = "#9ca0b0"
|
|
||||||
surface2 = "#acb0be"
|
|
||||||
surface1 = "#bcc0cc"
|
|
||||||
surface0 = "#ccd0da"
|
|
||||||
base = "#eff1f5"
|
|
||||||
mantle = "#e6e9ef"
|
|
||||||
crust = "#dce0e8"
|
|
||||||
|
|
||||||
[palettes.catppuccin_macchiato]
|
|
||||||
rosewater = "#f4dbd6"
|
|
||||||
flamingo = "#f0c6c6"
|
|
||||||
pink = "#f5bde6"
|
|
||||||
mauve = "#c6a0f6"
|
|
||||||
red = "#ed8796"
|
|
||||||
maroon = "#ee99a0"
|
|
||||||
peach = "#f5a97f"
|
|
||||||
yellow = "#eed49f"
|
|
||||||
green = "#a6da95"
|
|
||||||
teal = "#8bd5ca"
|
|
||||||
sky = "#91d7e3"
|
|
||||||
sapphire = "#7dc4e4"
|
|
||||||
blue = "#8aadf4"
|
|
||||||
lavender = "#b7bdf8"
|
|
||||||
text = "#cad3f5"
|
|
||||||
subtext1 = "#b8c0e0"
|
|
||||||
subtext0 = "#a5adcb"
|
|
||||||
overlay2 = "#939ab7"
|
|
||||||
overlay1 = "#8087a2"
|
|
||||||
overlay0 = "#6e738d"
|
|
||||||
surface2 = "#5b6078"
|
|
||||||
surface1 = "#494d64"
|
|
||||||
surface0 = "#363a4f"
|
|
||||||
base = "#24273a"
|
|
||||||
mantle = "#1e2030"
|
|
||||||
crust = "#181926"
|
|
||||||
@@ -1,14 +0,0 @@
|
|||||||
# ~/nixos/files/conf/terminal/zsh.conf
|
|
||||||
# Additional zsh configuration sourced for every interactive zsh shell.
|
|
||||||
# Keep this file POSIX-ish; it is sourced by zsh.
|
|
||||||
|
|
||||||
# Example: history settings
|
|
||||||
HISTFILE="$HOME/.zsh_history"
|
|
||||||
HISTSIZE=10000
|
|
||||||
SAVEHIST=10000
|
|
||||||
|
|
||||||
setopt HIST_IGNORE_ALL_DUPS
|
|
||||||
setopt SHARE_HISTORY
|
|
||||||
|
|
||||||
# Example: enable starship if you ever disable the zsh integration module
|
|
||||||
# eval "$(starship init zsh)"
|
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
# transition type: fade, wipe, simple, any, etc.
|
|
||||||
TRANSITION_TYPE=fade
|
|
||||||
# duration in seconds (can be decimal)
|
|
||||||
TRANSITION_DURATION=2
|
|
||||||
# frames per second
|
|
||||||
TRANSITION_FPS=60
|
|
||||||
# override source dir if you ever move it
|
|
||||||
# SRC_DIR=~/nixos/files/wallpapers/picture
|
|
||||||
|
Before Width: | Height: | Size: 425 KiB |
|
Before Width: | Height: | Size: 962 KiB |
|
Before Width: | Height: | Size: 5.3 MiB |
|
Before Width: | Height: | Size: 173 KiB |
|
Before Width: | Height: | Size: 270 KiB |
@@ -1,48 +0,0 @@
|
|||||||
{
|
|
||||||
"nodes": {
|
|
||||||
"home-manager": {
|
|
||||||
"inputs": {
|
|
||||||
"nixpkgs": [
|
|
||||||
"nixpkgs"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1770915843,
|
|
||||||
"narHash": "sha256-ZwU5wXKNqpOQvjNz6aBp1j5peiBZow1++6pLnk5VAhs=",
|
|
||||||
"owner": "nix-community",
|
|
||||||
"repo": "home-manager",
|
|
||||||
"rev": "6a1f7101d2c3ee87d485a87880d73b4665c6a4bd",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "nix-community",
|
|
||||||
"repo": "home-manager",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"nixpkgs": {
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1770562336,
|
|
||||||
"narHash": "sha256-ub1gpAONMFsT/GU2hV6ZWJjur8rJ6kKxdm9IlCT0j84=",
|
|
||||||
"owner": "NixOS",
|
|
||||||
"repo": "nixpkgs",
|
|
||||||
"rev": "d6c71932130818840fc8fe9509cf50be8c64634f",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "NixOS",
|
|
||||||
"ref": "nixos-unstable",
|
|
||||||
"repo": "nixpkgs",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"root": {
|
|
||||||
"inputs": {
|
|
||||||
"home-manager": "home-manager",
|
|
||||||
"nixpkgs": "nixpkgs"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"root": "root",
|
|
||||||
"version": 7
|
|
||||||
}
|
|
||||||
@@ -1,65 +0,0 @@
|
|||||||
{
|
|
||||||
description = "NixOS baseline everywhere + per-host exceptions + HM deviations";
|
|
||||||
|
|
||||||
inputs = {
|
|
||||||
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
|
|
||||||
|
|
||||||
home-manager = {
|
|
||||||
url = "github:nix-community/home-manager";
|
|
||||||
inputs.nixpkgs.follows = "nixpkgs";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
outputs = { self, nixpkgs, home-manager, ... }:
|
|
||||||
let
|
|
||||||
lib = nixpkgs.lib;
|
|
||||||
|
|
||||||
# Helper: make a NixOS system for a host
|
|
||||||
mkHost =
|
|
||||||
{ hostname
|
|
||||||
, system ? "x86_64-linux"
|
|
||||||
, username ? "henrov"
|
|
||||||
}:
|
|
||||||
lib.nixosSystem {
|
|
||||||
inherit system;
|
|
||||||
|
|
||||||
modules = [
|
|
||||||
# --- Host entrypoint ---
|
|
||||||
./hosts/${hostname}/configuration.nix
|
|
||||||
|
|
||||||
# --- Shared baseline for ALL machines ---
|
|
||||||
./modules/nixos/base.nix
|
|
||||||
|
|
||||||
# --- Home Manager as a NixOS module ---
|
|
||||||
home-manager.nixosModules.home-manager
|
|
||||||
|
|
||||||
# --- HM integration settings ---
|
|
||||||
{
|
|
||||||
home-manager.useGlobalPkgs = true;
|
|
||||||
home-manager.useUserPackages = true;
|
|
||||||
|
|
||||||
# Your user HM entrypoint
|
|
||||||
home-manager.users.${username} = import ./home/${username}/home.nix;
|
|
||||||
}
|
|
||||||
];
|
|
||||||
|
|
||||||
specialArgs = {
|
|
||||||
inherit self hostname username;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
in
|
|
||||||
{
|
|
||||||
nixosConfigurations = {
|
|
||||||
traveldroid = mkHost {
|
|
||||||
hostname = "traveldroid";
|
|
||||||
system = "x86_64-linux";
|
|
||||||
username = "henrov";
|
|
||||||
};
|
|
||||||
|
|
||||||
# Add more hosts like this:
|
|
||||||
# workstation = mkHost { hostname = "workstation"; system = "x86_64-linux"; username = "henrov"; };
|
|
||||||
# laptop = mkHost { hostname = "laptop"; system = "x86_64-linux"; username = "henrov"; };
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -1,17 +0,0 @@
|
|||||||
{ config, pkgs, lib, ... }:
|
|
||||||
|
|
||||||
{
|
|
||||||
imports = [
|
|
||||||
../../modules/home-manager/base.nix
|
|
||||||
];
|
|
||||||
|
|
||||||
home.username = "henrov";
|
|
||||||
home.homeDirectory = "/home/henrov";
|
|
||||||
|
|
||||||
# Required by Home Manager. Pick the version you first started using HM with.
|
|
||||||
# If unsure: use the current stable release version you're targeting.
|
|
||||||
home.stateVersion = "25.11";
|
|
||||||
|
|
||||||
# Let Home Manager manage itself.
|
|
||||||
programs.home-manager.enable = true;
|
|
||||||
}
|
|
||||||
@@ -1,33 +0,0 @@
|
|||||||
{ config, pkgs, lib, ... }:
|
|
||||||
|
|
||||||
{
|
|
||||||
imports = [
|
|
||||||
../../modules/nixos/base.nix
|
|
||||||
./hardware-configuration.nix
|
|
||||||
./graphics-effects.nix
|
|
||||||
./hardware.nix
|
|
||||||
./disk.nix
|
|
||||||
];
|
|
||||||
|
|
||||||
# Bootloader
|
|
||||||
boot.loader.systemd-boot.enable = true;
|
|
||||||
boot.loader.efi.canTouchEfiVariables = true;
|
|
||||||
|
|
||||||
system.stateVersion = "25.11";
|
|
||||||
|
|
||||||
# Basic system identity / networking
|
|
||||||
networking.hostName = "traveldroid";
|
|
||||||
|
|
||||||
# Keyboard (Xwayland / X11 apps)
|
|
||||||
services.xserver.xkb = {
|
|
||||||
layout = "us";
|
|
||||||
variant = "";
|
|
||||||
};
|
|
||||||
|
|
||||||
networking.networkmanager.enable = false;
|
|
||||||
systemd.services."NetworkManager-wait-online".enable = false;
|
|
||||||
|
|
||||||
|
|
||||||
# Enable flakes
|
|
||||||
nix.settings.experimental-features = [ "nix-command" "flakes" ];
|
|
||||||
}
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
{ ... }: { }
|
|
||||||
@@ -1,87 +0,0 @@
|
|||||||
{ config, lib, pkgs, ... }:
|
|
||||||
|
|
||||||
# ====================== WALLPAPER=========================
|
|
||||||
|
|
||||||
let
|
|
||||||
# Source of wallpapers in your repo (as you specified)
|
|
||||||
srcDir = "~/nixos/files/wallpapers/picture";
|
|
||||||
# Note: this is interpreted as a shell-style KEY=VALUE file.
|
|
||||||
confFile = "~/nixos/files/conf/wallpaper/wallpaper.conf";
|
|
||||||
setWallpaperScript = pkgs.writeShellScript "set-hourly-wallpaper" ''
|
|
||||||
set -euo pipefail
|
|
||||||
|
|
||||||
# --- Defaults (can be overridden by wallpaper.conf) ---
|
|
||||||
TRANSITION_TYPE="fade" # e.g. fade, wipe, simple, any
|
|
||||||
TRANSITION_DURATION="2" # seconds (can be decimals)
|
|
||||||
TRANSITION_FPS="60" # frames per second
|
|
||||||
SRC_DIR="${srcDir}"
|
|
||||||
|
|
||||||
# Load overrides (shell KEY=VALUE)
|
|
||||||
if [ -f "${confFile}" ]; then
|
|
||||||
# shellcheck disable=SC1090
|
|
||||||
. "${confFile}"
|
|
||||||
fi
|
|
||||||
|
|
||||||
DEST_DIR="$HOME/Pictures/Wallpapers"
|
|
||||||
mkdir -p "$DEST_DIR"
|
|
||||||
|
|
||||||
# Copy source wallpapers into user's Pictures/Wallpapers
|
|
||||||
# -r recursive, -u update if newer
|
|
||||||
# If the folder is empty or missing, don't crash the session.
|
|
||||||
if [ -d "$SRC_DIR" ]; then
|
|
||||||
cp -ru "$SRC_DIR"/. "$DEST_DIR"/ 2>/dev/null || true
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Pick a random image from DEST_DIR
|
|
||||||
img="$(
|
|
||||||
find "$DEST_DIR" -type f \
|
|
||||||
\( -iname '*.jpg' -o -iname '*.jpeg' -o -iname '*.png' -o -iname '*.webp' \) \
|
|
||||||
| shuf -n 1
|
|
||||||
)"
|
|
||||||
|
|
||||||
[ -n "''${img:-}" ] || exit 0
|
|
||||||
|
|
||||||
# Ensure swww daemon is running (per-user)
|
|
||||||
if ! ${pkgs.swww}/bin/swww query >/dev/null 2>&1; then
|
|
||||||
${pkgs.swww}/bin/swww-daemon >/dev/null 2>&1 &
|
|
||||||
sleep 0.4
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Smooth transition wallpaper set
|
|
||||||
exec ${pkgs.swww}/bin/swww img "$img" \
|
|
||||||
--transition-type "''${TRANSITION_TYPE}" \
|
|
||||||
--transition-duration "''${TRANSITION_DURATION}" \
|
|
||||||
--transition-fps "''${TRANSITION_FPS}"
|
|
||||||
'';
|
|
||||||
in
|
|
||||||
{
|
|
||||||
# Packages needed by the script + swww
|
|
||||||
environment.systemPackages = with pkgs; [
|
|
||||||
swww
|
|
||||||
bash
|
|
||||||
coreutils
|
|
||||||
findutils
|
|
||||||
util-linux
|
|
||||||
];
|
|
||||||
|
|
||||||
# Run for ANY logged-in user via systemd user units
|
|
||||||
# (each user session has its own systemd --user instance)
|
|
||||||
systemd.user.services.wallpaper-rotate = {
|
|
||||||
description = "Copy wallpapers to ~/Pictures/Wallpapers and set a random wallpaper with transition";
|
|
||||||
serviceConfig = {
|
|
||||||
Type = "oneshot";
|
|
||||||
ExecStart = "${setWallpaperScript}";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
systemd.user.timers.wallpaper-rotate = {
|
|
||||||
description = "Hourly wallpaper rotation timer";
|
|
||||||
wantedBy = [ "timers.target" ];
|
|
||||||
timerConfig = {
|
|
||||||
OnBootSec = "2min";
|
|
||||||
OnUnitActiveSec = "1h";
|
|
||||||
RandomizedDelaySec = "5min";
|
|
||||||
Unit = "wallpaper-rotate.service";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -1,40 +0,0 @@
|
|||||||
# Do not modify this file! It was generated by ‘nixos-generate-config’
|
|
||||||
# and may be overwritten by future invocations. Please make changes
|
|
||||||
# to /etc/nixos/configuration.nix instead.
|
|
||||||
{ config, lib, pkgs, modulesPath, ... }:
|
|
||||||
|
|
||||||
{
|
|
||||||
imports =
|
|
||||||
[ (modulesPath + "/installer/scan/not-detected.nix")
|
|
||||||
];
|
|
||||||
|
|
||||||
boot.initrd.availableKernelModules = [ "xhci_pci" "nvme" "usb_storage" "sd_mod" "rtsx_usb_sdmmc" ];
|
|
||||||
boot.initrd.kernelModules = [ ];
|
|
||||||
boot.kernelModules = [ "kvm-intel" ];
|
|
||||||
boot.extraModulePackages = [ ];
|
|
||||||
|
|
||||||
fileSystems."/" =
|
|
||||||
{ device = "/dev/disk/by-uuid/f08fc2a7-0b2b-4cbb-a65a-8b6e7ee4cec9";
|
|
||||||
fsType = "btrfs";
|
|
||||||
options = [ "subvol=@" ];
|
|
||||||
};
|
|
||||||
|
|
||||||
fileSystems."/home" =
|
|
||||||
{ device = "/dev/disk/by-uuid/f08fc2a7-0b2b-4cbb-a65a-8b6e7ee4cec9";
|
|
||||||
fsType = "btrfs";
|
|
||||||
options = [ "subvol=@home" ];
|
|
||||||
};
|
|
||||||
|
|
||||||
fileSystems."/boot" =
|
|
||||||
{ device = "/dev/disk/by-uuid/25C1-E4F2";
|
|
||||||
fsType = "vfat";
|
|
||||||
options = [ "fmask=0077" "dmask=0077" ];
|
|
||||||
};
|
|
||||||
|
|
||||||
swapDevices =
|
|
||||||
[ { device = "/dev/disk/by-uuid/f771a317-26a2-4524-a458-42ba22b29e67"; }
|
|
||||||
];
|
|
||||||
|
|
||||||
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
|
|
||||||
hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
|
|
||||||
}
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
{ ... }: { }
|
|
||||||
@@ -1,226 +0,0 @@
|
|||||||
{ config, pkgs, lib, ... }:
|
|
||||||
|
|
||||||
let
|
|
||||||
cfg = config.dataPro.wallpaper; # custom namespace
|
|
||||||
|
|
||||||
# Where we keep a runtime-editable config for the user.
|
|
||||||
runtimeConfDir = "${config.xdg.configHome}/wallpaper";
|
|
||||||
runtimeConfPath = "${runtimeConfDir}/wallpaper.conf";
|
|
||||||
|
|
||||||
rotateScript = pkgs.writeShellScript "wallpaper-rotate" ''
|
|
||||||
set -euo pipefail
|
|
||||||
|
|
||||||
export PATH=${lib.makeBinPath [
|
|
||||||
pkgs.coreutils
|
|
||||||
pkgs.findutils
|
|
||||||
pkgs.gnugrep
|
|
||||||
pkgs.gawk
|
|
||||||
pkgs.util-linux
|
|
||||||
pkgs.swww
|
|
||||||
]}
|
|
||||||
|
|
||||||
# Defaults (can be overridden by wallpaper.conf)
|
|
||||||
SOURCE_DIR="${cfg.sourceDir}"
|
|
||||||
TARGET_DIR="${cfg.targetDir}"
|
|
||||||
ROTATION_DIR="${cfg.rotationDir}"
|
|
||||||
TRANSITION_TYPE="fade"
|
|
||||||
TRANSITION_DURATION="2.5"
|
|
||||||
TRANSITION_FPS="60"
|
|
||||||
PICK_MODE="random" # random | sequential
|
|
||||||
LAST_FILE="${config.xdg.stateHome}/wallpaper/last.txt"
|
|
||||||
|
|
||||||
# Load user config if present (KEY=VALUE lines; '#' comments allowed)
|
|
||||||
if [ -f "${runtimeConfPath}" ]; then
|
|
||||||
# shellcheck disable=SC1090
|
|
||||||
. "${runtimeConfPath}"
|
|
||||||
fi
|
|
||||||
|
|
||||||
mkdir -p "$TARGET_DIR" "${config.xdg.stateHome}/wallpaper"
|
|
||||||
|
|
||||||
# Ensure swww-daemon is running
|
|
||||||
if ! pgrep -x swww-daemon >/dev/null 2>&1; then
|
|
||||||
swww-daemon >/dev/null 2>&1 &
|
|
||||||
sleep 0.3
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Pick image
|
|
||||||
if [ ! -d "$ROTATION_DIR" ]; then
|
|
||||||
echo "Rotation directory does not exist: $ROTATION_DIR" >&2
|
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Build list once per run
|
|
||||||
mapfile -d '' -t imgs < <(
|
|
||||||
find "$ROTATION_DIR" -type f \
|
|
||||||
\( -iname '*.jpg' -o -iname '*.jpeg' -o -iname '*.png' -o -iname '*.webp' \) \
|
|
||||||
-print0
|
|
||||||
)
|
|
||||||
|
|
||||||
if [ "${#imgs[@]}" -eq 0 ]; then
|
|
||||||
echo "No images found in: $ROTATION_DIR" >&2
|
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
img=""
|
|
||||||
if [ "$PICK_MODE" = "sequential" ]; then
|
|
||||||
last=""
|
|
||||||
if [ -f "$LAST_FILE" ]; then
|
|
||||||
last="$(cat "$LAST_FILE" || true)"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Sort for stable order
|
|
||||||
IFS=$'\n' sorted=($(printf '%s\n' "${imgs[@]}" | sort))
|
|
||||||
unset IFS
|
|
||||||
|
|
||||||
# Find next after last
|
|
||||||
next=""
|
|
||||||
found_last=0
|
|
||||||
for f in "${sorted[@]}"; do
|
|
||||||
if [ "$found_last" -eq 1 ]; then
|
|
||||||
next="$f"
|
|
||||||
break
|
|
||||||
fi
|
|
||||||
if [ "$f" = "$last" ]; then
|
|
||||||
found_last=1
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
if [ -z "$next" ]; then
|
|
||||||
next="${sorted[0]}"
|
|
||||||
fi
|
|
||||||
img="$next"
|
|
||||||
printf '%s' "$img" > "$LAST_FILE"
|
|
||||||
else
|
|
||||||
# random
|
|
||||||
img="$(printf '%s\0' "${imgs[@]}" | shuf -z -n 1 | tr -d '\0')"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Smooth transition wallpaper set
|
|
||||||
swww img "$img" \
|
|
||||||
--transition-type "$TRANSITION_TYPE" \
|
|
||||||
--transition-duration "$TRANSITION_DURATION" \
|
|
||||||
--transition-fps "$TRANSITION_FPS"
|
|
||||||
'';
|
|
||||||
in
|
|
||||||
{
|
|
||||||
options.dataPro.wallpaper = {
|
|
||||||
enable = lib.mkEnableOption "Hourly wallpaper rotation with swww (Hyprland/Wayland)";
|
|
||||||
|
|
||||||
# You asked to make this easy to change:
|
|
||||||
sourceDir = lib.mkOption {
|
|
||||||
type = lib.types.str;
|
|
||||||
default = "${config.home.homeDirectory}/nixos/files/wallpaper/picture";
|
|
||||||
description = "Folder containing wallpapers to rotate (source of truth).";
|
|
||||||
};
|
|
||||||
|
|
||||||
targetDir = lib.mkOption {
|
|
||||||
type = lib.types.str;
|
|
||||||
default = "${config.home.homeDirectory}/wallpaper";
|
|
||||||
description = "Folder in the user's home where wallpapers are copied to.";
|
|
||||||
};
|
|
||||||
|
|
||||||
rotationDir = lib.mkOption {
|
|
||||||
type = lib.types.str;
|
|
||||||
default = "${config.home.homeDirectory}/wallpaper/picture";
|
|
||||||
description = "Folder used by the rotator to pick wallpapers from (usually inside targetDir).";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
config = lib.mkIf cfg.enable {
|
|
||||||
home.packages = [
|
|
||||||
pkgs.swww
|
|
||||||
pkgs.coreutils
|
|
||||||
pkgs.findutils
|
|
||||||
pkgs.gnugrep
|
|
||||||
pkgs.gawk
|
|
||||||
pkgs.util-linux
|
|
||||||
];
|
|
||||||
|
|
||||||
# Copy wallpapers from sourceDir into rotationDir (real copy) at activation.
|
|
||||||
home.activation.wallpaperCopy = lib.hm.dag.entryAfter [ "writeBoundary" ] ''
|
|
||||||
set -euo pipefail
|
|
||||||
mkdir -p "${cfg.targetDir}" "${cfg.rotationDir}"
|
|
||||||
|
|
||||||
if [ -d "${cfg.sourceDir}" ]; then
|
|
||||||
# Copy source into rotationDir (contents only).
|
|
||||||
cp -a "${cfg.sourceDir}/." "${cfg.rotationDir}/"
|
|
||||||
fi
|
|
||||||
'';
|
|
||||||
|
|
||||||
# Install a runtime-editable config into ~/.config/wallpaper/wallpaper.conf
|
|
||||||
# First-time copy from repo if present; then never overwrite if user edited it.
|
|
||||||
home.activation.wallpaperConf = lib.hm.dag.entryAfter [ "writeBoundary" ] ''
|
|
||||||
set -euo pipefail
|
|
||||||
mkdir -p "${runtimeConfDir}"
|
|
||||||
|
|
||||||
if [ ! -f "${runtimeConfPath}" ]; then
|
|
||||||
if [ -f "${config.home.homeDirectory}/nixos/files/conf/wallpaper/wallpaper.conf" ]; then
|
|
||||||
cp -a "${config.home.homeDirectory}/nixos/files/conf/wallpaper/wallpaper.conf" "${runtimeConfPath}"
|
|
||||||
else
|
|
||||||
cat > "${runtimeConfPath}" <<'EOF'
|
|
||||||
# wallpaper.conf — runtime settings for the wallpaper rotator (swww)
|
|
||||||
# Lines are KEY=VALUE. '#' starts a comment.
|
|
||||||
|
|
||||||
# Folder to copy wallpapers from (source of truth)
|
|
||||||
#SOURCE_DIR="$HOME/nixos/files/wallpaper/picture"
|
|
||||||
|
|
||||||
# Where wallpapers are copied to (a folder in your home)
|
|
||||||
#TARGET_DIR="$HOME/wallpaper"
|
|
||||||
|
|
||||||
# Folder used for rotation (where images are selected from)
|
|
||||||
#ROTATION_DIR="$HOME/wallpaper/picture"
|
|
||||||
|
|
||||||
# random | sequential
|
|
||||||
#PICK_MODE="random"
|
|
||||||
|
|
||||||
# swww transition settings
|
|
||||||
#TRANSITION_TYPE="fade"
|
|
||||||
#TRANSITION_DURATION="2.5"
|
|
||||||
#TRANSITION_FPS="60"
|
|
||||||
EOF
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
'';
|
|
||||||
|
|
||||||
# Start swww daemon on graphical session start
|
|
||||||
systemd.user.services.swww-daemon = {
|
|
||||||
Unit = {
|
|
||||||
Description = "swww wallpaper daemon";
|
|
||||||
After = [ "graphical-session.target" ];
|
|
||||||
PartOf = [ "graphical-session.target" ];
|
|
||||||
};
|
|
||||||
Service = {
|
|
||||||
ExecStart = "${pkgs.swww}/bin/swww-daemon";
|
|
||||||
Restart = "on-failure";
|
|
||||||
};
|
|
||||||
Install = {
|
|
||||||
WantedBy = [ "graphical-session.target" ];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
# Rotate wallpaper hourly
|
|
||||||
systemd.user.services.wallpaper-rotate = {
|
|
||||||
Unit = {
|
|
||||||
Description = "Rotate wallpaper (hourly)";
|
|
||||||
After = [ "swww-daemon.service" ];
|
|
||||||
};
|
|
||||||
Service = {
|
|
||||||
Type = "oneshot";
|
|
||||||
ExecStart = "${rotateScript}";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
systemd.user.timers.wallpaper-rotate = {
|
|
||||||
Unit = {
|
|
||||||
Description = "Hourly wallpaper rotation timer";
|
|
||||||
};
|
|
||||||
Timer = {
|
|
||||||
OnBootSec = "2m";
|
|
||||||
OnUnitActiveSec = "1h";
|
|
||||||
Unit = "wallpaper-rotate.service";
|
|
||||||
};
|
|
||||||
Install = {
|
|
||||||
WantedBy = [ "timers.target" ];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -1,67 +0,0 @@
|
|||||||
{ config, lib, pkgs, ... }:
|
|
||||||
|
|
||||||
let
|
|
||||||
moduleName = "hm-default-apps";
|
|
||||||
in
|
|
||||||
{
|
|
||||||
# Ensure update-mime-database is available
|
|
||||||
home.packages = with pkgs; [
|
|
||||||
shared-mime-info
|
|
||||||
];
|
|
||||||
|
|
||||||
# Teach the MIME DB that *.nix files are text/x-nix
|
|
||||||
xdg.dataFile."mime/packages/custom-text-types.xml".text = ''
|
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<mime-info xmlns="http://www.freedesktop.org/standards/shared-mime-info">
|
|
||||||
|
|
||||||
<mime-type type="text/x-nix">
|
|
||||||
<comment>Nix expression</comment>
|
|
||||||
<sub-class-of type="text/plain"/>
|
|
||||||
<glob pattern="*.nix"/>
|
|
||||||
</mime-type>
|
|
||||||
|
|
||||||
<mime-type type="text/x-ini">
|
|
||||||
<comment>Configuration file</comment>
|
|
||||||
<sub-class-of type="text/plain"/>
|
|
||||||
<glob pattern="*.conf"/>
|
|
||||||
</mime-type>
|
|
||||||
|
|
||||||
</mime-info>
|
|
||||||
'';
|
|
||||||
|
|
||||||
# Rebuild user MIME database after HM writes xdg.dataFile files
|
|
||||||
home.activation.updateMimeDatabase =
|
|
||||||
lib.hm.dag.entryAfter [ "writeBoundary" ] ''
|
|
||||||
${pkgs.shared-mime-info}/bin/update-mime-database ${config.xdg.dataHome}/mime
|
|
||||||
'';
|
|
||||||
|
|
||||||
xdg.mimeApps.enable = true;
|
|
||||||
|
|
||||||
xdg.mimeApps.defaultApplications = {
|
|
||||||
# Nix files
|
|
||||||
"text/x-nix" = [ "org.kde.kate.desktop" ];
|
|
||||||
"text/plain" = [ "org.kde.kate.desktop" ];
|
|
||||||
"text/x-ini" = [ "org.kde.kate.desktop" ];
|
|
||||||
"application/x-desktop" = [ "org.kde.kate.desktop" ];
|
|
||||||
|
|
||||||
# Zen Browser (Flatpak)
|
|
||||||
"x-scheme-handler/http" = [ "app.zen_browser.zen.desktop" ];
|
|
||||||
"x-scheme-handler/https" = [ "app.zen_browser.zen.desktop" ];
|
|
||||||
"text/html" = [ "app.zen_browser.zen.desktop" ];
|
|
||||||
|
|
||||||
# Email
|
|
||||||
"x-scheme-handler/mailto" = [ "eu.betterbird.Betterbird.desktop" ];
|
|
||||||
"message/rfc822" = [ "eu.betterbird.Betterbird.desktop" ];
|
|
||||||
|
|
||||||
# Calendar (common handlers)
|
|
||||||
"text/calendar" = [ "eu.betterbird.Betterbird.desktop" ];
|
|
||||||
"application/ics" = [ "eu.betterbird.Betterbird.desktop" ];
|
|
||||||
"application/calendar" = [ "eu.betterbird.Betterbird.desktop" ];
|
|
||||||
"x-scheme-handler/webcal" = [ "eu.betterbird.Betterbird.desktop" ];
|
|
||||||
"x-scheme-handler/webcals" = [ "eu.betterbird.Betterbird.desktop" ];
|
|
||||||
|
|
||||||
# File manager
|
|
||||||
"inode/directory" = [ "org.kde.dolphin.desktop" ];
|
|
||||||
};
|
|
||||||
home.file.".nixlog/loaded.${moduleName}-module-loaded".text = "loaded\n";
|
|
||||||
}
|
|
||||||
@@ -1,26 +0,0 @@
|
|||||||
{ config, pkgs, lib, ... }:
|
|
||||||
|
|
||||||
{
|
|
||||||
imports = [
|
|
||||||
# Shell (deviations)
|
|
||||||
./shell/zsh.nix
|
|
||||||
./shell/starship.nix
|
|
||||||
|
|
||||||
# Dev (deviations)
|
|
||||||
./dev/git.nix
|
|
||||||
./dev/ssh-client.nix
|
|
||||||
./dev/direnv.nix
|
|
||||||
|
|
||||||
# Desktop overrides (deviations)
|
|
||||||
./desktop/hyprland-overrides.nix
|
|
||||||
./desktop/waybar-overrides.nix
|
|
||||||
./desktop/hyprshell.nix
|
|
||||||
|
|
||||||
# apps
|
|
||||||
./apps/default-apps.nix
|
|
||||||
];
|
|
||||||
|
|
||||||
# Home Manager should manage XDG base dirs consistently
|
|
||||||
xdg.enable = true;
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
{ ... }: { }
|
|
||||||
@@ -1,39 +0,0 @@
|
|||||||
{ config, lib, pkgs, ... }:
|
|
||||||
|
|
||||||
let
|
|
||||||
moduleName = "hm-hyprshell";
|
|
||||||
|
|
||||||
# Absolute path in your home repo (string is fine here, but we must convert properly)
|
|
||||||
repoDir = "${config.home.homeDirectory}/nixos/files/conf/hyprshell";
|
|
||||||
in
|
|
||||||
{
|
|
||||||
xdg.enable = true;
|
|
||||||
|
|
||||||
# Symlink the whole directory into ~/.config/hyprshell
|
|
||||||
xdg.configFile."hyprshell" = {
|
|
||||||
source = config.lib.file.mkOutOfStoreSymlink repoDir;
|
|
||||||
recursive = true;
|
|
||||||
};
|
|
||||||
|
|
||||||
home.packages = [ pkgs.hyprshell ];
|
|
||||||
|
|
||||||
systemd.user.services.hyprshell = {
|
|
||||||
Unit = {
|
|
||||||
Description = "Hyprshell";
|
|
||||||
PartOf = [ "graphical-session.target" ];
|
|
||||||
After = [ "graphical-session.target" ];
|
|
||||||
};
|
|
||||||
|
|
||||||
Service = {
|
|
||||||
ExecStart = "${pkgs.hyprshell}/bin/hyprshell run";
|
|
||||||
Restart = "on-failure";
|
|
||||||
RestartSec = 1;
|
|
||||||
};
|
|
||||||
|
|
||||||
Install = {
|
|
||||||
WantedBy = [ "graphical-session.target" ];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
home.file.".nixlog/loaded.${moduleName}-module-loaded".text = "loaded\n";
|
|
||||||
}
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
{ ... }: { }
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
{ ... }: { }
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
{ ... }: { }
|
|
||||||
@@ -1,31 +0,0 @@
|
|||||||
{ config, lib, pkgs, ... }:
|
|
||||||
|
|
||||||
let
|
|
||||||
confDir = "${config.home.homeDirectory}/nixos/files/conf/ssh";
|
|
||||||
sshClientConf = "${confDir}/ssh-client.conf";
|
|
||||||
in
|
|
||||||
{
|
|
||||||
programs.ssh = {
|
|
||||||
enable = true;
|
|
||||||
enableDefaultConfig = false;
|
|
||||||
|
|
||||||
matchBlocks."*" = {
|
|
||||||
addKeysToAgent = "yes";
|
|
||||||
serverAliveInterval = 30;
|
|
||||||
serverAliveCountMax = 3;
|
|
||||||
};
|
|
||||||
|
|
||||||
# Load your extra SSH config from a file in ~/nixos/files/conf/ssh/
|
|
||||||
extraConfig = ''
|
|
||||||
Include ${config.home.homeDirectory}/nixos/files/conf/ssh/ssh-client.conf
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
|
|
||||||
# Home Manager's ssh-agent (NOT programs.ssh.startAgent; that's NixOS)
|
|
||||||
services.ssh-agent = {
|
|
||||||
enable = true;
|
|
||||||
|
|
||||||
# Optional: if you use zsh, this helps export SSH_AUTH_SOCK in your shell
|
|
||||||
enableZshIntegration = true;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -1,22 +0,0 @@
|
|||||||
# /home/henrov/nixos/modules/home-manager/shell/starship.nix
|
|
||||||
#
|
|
||||||
# Home Manager Starship prompt configuration.
|
|
||||||
# Configuration is sourced from: ~/nixos/files/conf/terminal/starship.toml
|
|
||||||
|
|
||||||
{ config, lib, pkgs, ... }:
|
|
||||||
|
|
||||||
let
|
|
||||||
# From: nixos/modules/home-manager/shell -> nixos/files/conf/terminal
|
|
||||||
confDir = ../../../files/conf/terminal;
|
|
||||||
in
|
|
||||||
{
|
|
||||||
programs.starship = {
|
|
||||||
enable = true;
|
|
||||||
|
|
||||||
# Let Starship hook into shells managed by Home Manager.
|
|
||||||
enableZshIntegration = true;
|
|
||||||
enableBashIntegration = true;
|
|
||||||
|
|
||||||
settings = builtins.fromTOML (builtins.readFile (confDir + "/starship.toml"));
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -1,41 +0,0 @@
|
|||||||
# /home/henrov/nixos/modules/home-manager/shell/zsh.nix
|
|
||||||
#
|
|
||||||
# Home Manager Zsh + Kitty baseline.
|
|
||||||
# Configuration is sourced from:
|
|
||||||
# ~/nixos/files/conf/terminal/aliases.conf
|
|
||||||
# ~/nixos/files/conf/terminal/zsh.conf
|
|
||||||
# ~/nixos/files/conf/terminal/kitty.conf
|
|
||||||
|
|
||||||
{ config, lib, pkgs, ... }:
|
|
||||||
|
|
||||||
let
|
|
||||||
# From: nixos/modules/home-manager/shell -> nixos/files/conf/terminal
|
|
||||||
confDir = ../../../files/conf/terminal;
|
|
||||||
in
|
|
||||||
{
|
|
||||||
home.packages = with pkgs; [
|
|
||||||
kitty
|
|
||||||
];
|
|
||||||
|
|
||||||
programs.zsh = {
|
|
||||||
enable = true;
|
|
||||||
enableCompletion = true;
|
|
||||||
dotDir = config.home.homeDirectory;
|
|
||||||
|
|
||||||
# Load shared, editable snippets.
|
|
||||||
initContent = ''
|
|
||||||
# Shared aliases
|
|
||||||
if [ -f "${confDir}/aliases.conf" ]; then
|
|
||||||
source "${confDir}/aliases.conf"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Shared zsh config snippets
|
|
||||||
if [ -f "${confDir}/zsh.conf" ]; then
|
|
||||||
source "${confDir}/zsh.conf"
|
|
||||||
fi
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
|
|
||||||
programs.kitty.enable = true;
|
|
||||||
xdg.configFile."kitty/kitty.conf".source = confDir + "/kitty.conf";
|
|
||||||
}
|
|
||||||
@@ -1,81 +0,0 @@
|
|||||||
{ config, pkgs, lib, ... }:
|
|
||||||
|
|
||||||
let
|
|
||||||
# Adjust this path if your module lives elsewhere in the repo
|
|
||||||
flatpakConfPath = ../../../files/conf/apps/flatpak.conf;
|
|
||||||
|
|
||||||
# Parse flatpak.conf: ignore empty lines and comments
|
|
||||||
flatpakApps =
|
|
||||||
let
|
|
||||||
lines = lib.splitString "\n" (builtins.readFile flatpakConfPath);
|
|
||||||
cleaned = map (l: lib.strings.trim l) lines;
|
|
||||||
in
|
|
||||||
builtins.filter (l: l != "" && !(lib.hasPrefix "#" l)) cleaned;
|
|
||||||
|
|
||||||
# Shell script that:
|
|
||||||
# - adds Flathub if missing
|
|
||||||
# - installs missing apps
|
|
||||||
# - (optional) removes apps not in the list
|
|
||||||
syncFlatpaks = pkgs.writeShellScript "sync-flatpaks" ''
|
|
||||||
set -euo pipefail
|
|
||||||
|
|
||||||
# Ensure Flathub remote exists (system-wide)
|
|
||||||
if ! flatpak remotes --system --columns=name | grep -qx flathub; then
|
|
||||||
flatpak remote-add --system --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo
|
|
||||||
fi
|
|
||||||
|
|
||||||
desired_apps=(
|
|
||||||
${lib.concatStringsSep "\n" (map (a: ''"${a}"'') flatpakApps)}
|
|
||||||
)
|
|
||||||
|
|
||||||
# Install desired apps if missing
|
|
||||||
for app in "''${desired_apps[@]}"; do
|
|
||||||
if ! flatpak info --system "$app" >/dev/null 2>&1; then
|
|
||||||
flatpak install --system -y --noninteractive flathub "$app"
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
# OPTIONAL: remove system apps not listed (uncomment to enforce strictly)
|
|
||||||
# installed="$(flatpak list --system --app --columns=application | sed '/^$/d')"
|
|
||||||
# for app in $installed; do
|
|
||||||
# keep=0
|
|
||||||
# for want in "''${desired_apps[@]}"; do
|
|
||||||
# if [ "$app" = "$want" ]; then keep=1; break; fi
|
|
||||||
# done
|
|
||||||
# if [ "$keep" -eq 0 ]; then
|
|
||||||
# flatpak uninstall --system -y --noninteractive "$app" || true
|
|
||||||
# fi
|
|
||||||
# done
|
|
||||||
'';
|
|
||||||
in
|
|
||||||
{
|
|
||||||
# Native NixOS Flatpak support
|
|
||||||
services.flatpak.enable = true; # enables Flatpak on NixOS :contentReference[oaicite:1]{index=1}
|
|
||||||
|
|
||||||
# Strongly recommended for Flatpak desktop integration
|
|
||||||
# (Adjust portals to your DE/WM if you want, this is a safe default.)
|
|
||||||
xdg.portal = {
|
|
||||||
enable = true;
|
|
||||||
extraPortals = [ pkgs.xdg-desktop-portal-gtk ];
|
|
||||||
};
|
|
||||||
|
|
||||||
# Ensure the config file is present on the system (optional but convenient)
|
|
||||||
environment.etc."flatpak/flatpak.conf".source = flatpakConfPath;
|
|
||||||
|
|
||||||
# Run sync after boot and after rebuilds, once networking is up
|
|
||||||
systemd.services.flatpak-sync = {
|
|
||||||
description = "Install Flatpak apps listed in flatpak.conf";
|
|
||||||
wantedBy = [ "multi-user.target" ];
|
|
||||||
wants = [ "network-online.target" ];
|
|
||||||
after = [ "network-online.target" ];
|
|
||||||
|
|
||||||
serviceConfig = {
|
|
||||||
Type = "oneshot";
|
|
||||||
ExecStart = syncFlatpaks;
|
|
||||||
};
|
|
||||||
|
|
||||||
# Re-run when the config changes (best-effort)
|
|
||||||
restartTriggers = [ flatpakConfPath ];
|
|
||||||
path = [ pkgs.flatpak pkgs.coreutils pkgs.gnugrep pkgs.gnused ];
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -1,41 +0,0 @@
|
|||||||
{ lib, pkgs, ... }:
|
|
||||||
|
|
||||||
let
|
|
||||||
# Adjust this path if you place apps.nix elsewhere in the repo.
|
|
||||||
# Best practice: keep it relative to the flake repo so flakes can read it.
|
|
||||||
packagesConfPath = ../../../files/conf/apps/packages.conf;
|
|
||||||
|
|
||||||
raw = builtins.readFile packagesConfPath;
|
|
||||||
|
|
||||||
# Split into lines, trim whitespace, drop empty lines and comment lines.
|
|
||||||
lines =
|
|
||||||
let
|
|
||||||
all = lib.splitString "\n" raw;
|
|
||||||
trimmed = map lib.strings.trim all;
|
|
||||||
in
|
|
||||||
builtins.filter (l: l != "" && !(lib.hasPrefix "#" l)) trimmed;
|
|
||||||
|
|
||||||
# Resolve a name like:
|
|
||||||
# "wget" -> pkgs.wget
|
|
||||||
# "kdePackages.okular" -> pkgs.kdePackages.okular
|
|
||||||
# "_1password-gui" -> pkgs."_1password-gui"
|
|
||||||
resolvePkg = name:
|
|
||||||
let
|
|
||||||
parts = lib.splitString "." name;
|
|
||||||
found = lib.attrByPath parts null pkgs;
|
|
||||||
in
|
|
||||||
if found == null then
|
|
||||||
throw ''
|
|
||||||
apps.nix: Package "${name}" from ${toString packagesConfPath} not found in pkgs.
|
|
||||||
Only packages available on https://search.nixos.org/packages can be installed.
|
|
||||||
Fix the name (or attribute path) and rebuild.
|
|
||||||
''
|
|
||||||
else
|
|
||||||
found;
|
|
||||||
|
|
||||||
packages = map resolvePkg lines;
|
|
||||||
|
|
||||||
in
|
|
||||||
{
|
|
||||||
environment.systemPackages = packages;
|
|
||||||
}
|
|
||||||
@@ -1,56 +0,0 @@
|
|||||||
# ~/nixos/modules/nixos/base.nix
|
|
||||||
#
|
|
||||||
# Shared baseline for ALL hosts.
|
|
||||||
# Keep this predictable: explicit imports (no auto-import).
|
|
||||||
# Host-specific exceptions belong in hosts/<host>/*.nix
|
|
||||||
#
|
|
||||||
{ config, pkgs, lib, ... }:
|
|
||||||
|
|
||||||
let
|
|
||||||
moduleName = "nixos-base";
|
|
||||||
in
|
|
||||||
{
|
|
||||||
imports = [
|
|
||||||
# Core system baseline
|
|
||||||
./core/nix.nix
|
|
||||||
./core/locale.nix
|
|
||||||
./core/users.nix
|
|
||||||
./core/security.nix
|
|
||||||
./core/fonts.nix
|
|
||||||
|
|
||||||
# Networking baseline
|
|
||||||
./networking/networkmanager.nix
|
|
||||||
./networking/firewall.nix
|
|
||||||
|
|
||||||
# Desktop baseline (Wayland/Hyprland)
|
|
||||||
./desktop/audio.nix
|
|
||||||
./desktop/portals.nix
|
|
||||||
./desktop/wm-hyprland.nix
|
|
||||||
./desktop/greeter.nix
|
|
||||||
|
|
||||||
# Apps baseline
|
|
||||||
./apps/flatpak.nix
|
|
||||||
./apps/packages.nix
|
|
||||||
|
|
||||||
# Services baseline
|
|
||||||
./services/sshd.nix
|
|
||||||
./services/printing.nix
|
|
||||||
#./services/syncthing.nix
|
|
||||||
];
|
|
||||||
|
|
||||||
desktop.greeter.enable = true;
|
|
||||||
#make sure existing files can be overwritten
|
|
||||||
home-manager.backupFileExtension = "hm-bak";
|
|
||||||
|
|
||||||
environment.etc."nixlog/loaded.${moduleName}".text = "loaded\n";
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -1,33 +0,0 @@
|
|||||||
# Baseline fonts for the system (NixOS 25.05+ / 26.05 compatible)
|
|
||||||
#
|
|
||||||
# Note:
|
|
||||||
# - `noto-fonts-cjk` was deprecated/split into:
|
|
||||||
# - noto-fonts-cjk-sans
|
|
||||||
# - noto-fonts-cjk-serif
|
|
||||||
|
|
||||||
{ config, lib, pkgs, ... }:
|
|
||||||
|
|
||||||
let
|
|
||||||
moduleName = "nixos-fonts";
|
|
||||||
|
|
||||||
has = name: builtins.hasAttr name pkgs;
|
|
||||||
in
|
|
||||||
{
|
|
||||||
fonts = {
|
|
||||||
# Keep your existing setup idea: install baseline font packages system-wide
|
|
||||||
packages =
|
|
||||||
(with pkgs; [
|
|
||||||
noto-fonts
|
|
||||||
noto-fonts-color-emoji
|
|
||||||
])
|
|
||||||
# CJK split (new)
|
|
||||||
++ lib.optionals (has "noto-fonts-cjk-sans") [ pkgs.noto-fonts-cjk-sans ]
|
|
||||||
++ lib.optionals (has "noto-fonts-cjk-serif") [ pkgs.noto-fonts-cjk-serif ];
|
|
||||||
|
|
||||||
# Optional: common baseline toggle (leave as-is if you already set it elsewhere)
|
|
||||||
# enableDefaultPackages = lib.mkDefault true;
|
|
||||||
};
|
|
||||||
|
|
||||||
# Breadcrumb for debugging
|
|
||||||
environment.etc."nixlog/loaded.${moduleName}".text = "loaded\n";
|
|
||||||
}
|
|
||||||
@@ -1,10 +0,0 @@
|
|||||||
{ config, pkgs, lib, ... }:
|
|
||||||
|
|
||||||
let
|
|
||||||
moduleName = "nixos-locale";
|
|
||||||
in
|
|
||||||
{
|
|
||||||
time.timeZone = "Europe/Amsterdam";
|
|
||||||
i18n.defaultLocale = "en_US.UTF-8";
|
|
||||||
environment.etc."nixlog/loaded.${moduleName}".text = "loaded\n";
|
|
||||||
}
|
|
||||||
@@ -1,54 +0,0 @@
|
|||||||
# ~/nixos/modules/nixos/core/nix.nix
|
|
||||||
#
|
|
||||||
# Purpose:
|
|
||||||
# - Shared baseline Nix configuration for ALL hosts
|
|
||||||
# - Flakes enabled
|
|
||||||
# - Reasonable garbage collection defaults
|
|
||||||
# - Allow unfree packages (needed for Brave/Vivaldi/Opera etc.)
|
|
||||||
|
|
||||||
{ config, lib, pkgs, ... }:
|
|
||||||
|
|
||||||
let
|
|
||||||
moduleName = "nixos-core-nix";
|
|
||||||
in
|
|
||||||
{
|
|
||||||
# Required for Brave/Vivaldi/Opera and other proprietary software.
|
|
||||||
nixpkgs.config.allowUnfree = true;
|
|
||||||
|
|
||||||
nix = {
|
|
||||||
# Enable flakes + nix-command everywhere (baseline)
|
|
||||||
settings.experimental-features = [ "nix-command" "flakes" ];
|
|
||||||
|
|
||||||
# Why:
|
|
||||||
# - Keeps the store from growing forever
|
|
||||||
# - Still allows rollbacks for a while
|
|
||||||
settings.auto-optimise-store = true;
|
|
||||||
|
|
||||||
# Reasonable default: allow Nix to use all CPU cores
|
|
||||||
settings.max-jobs = lib.mkDefault "auto";
|
|
||||||
};
|
|
||||||
|
|
||||||
# Automatic cleanup of old generations and store garbage
|
|
||||||
#
|
|
||||||
# Why:
|
|
||||||
# - On multi-machine setups, store growth is one of the main annoyances.
|
|
||||||
# - This is safe and keeps machines tidy.
|
|
||||||
nix.gc = {
|
|
||||||
automatic = true;
|
|
||||||
dates = "weekly";
|
|
||||||
options = "--delete-older-than 14d";
|
|
||||||
};
|
|
||||||
|
|
||||||
# Keep a limited number of boot entries / system generations
|
|
||||||
#
|
|
||||||
# Why:
|
|
||||||
# - Still safe for rollbacks
|
|
||||||
# - Prevents /boot from filling up on some setups
|
|
||||||
boot.loader.systemd-boot.configurationLimit = lib.mkDefault 10;
|
|
||||||
|
|
||||||
nix.settings.download-buffer-size = 67108864;
|
|
||||||
|
|
||||||
|
|
||||||
# Optional: breadcrumb for debugging module load order
|
|
||||||
environment.etc."nixlog/loaded.${moduleName}".text = "loaded\n";
|
|
||||||
}
|
|
||||||
@@ -1,39 +0,0 @@
|
|||||||
# ~/nixos/modules/nixos/core/security.nix
|
|
||||||
#
|
|
||||||
# Purpose:
|
|
||||||
# - Security primitives that are shared across all hosts:
|
|
||||||
# - polkit (desktop authorization framework)
|
|
||||||
# - sudo baseline (privilege escalation)
|
|
||||||
#
|
|
||||||
# Keep this file conservative: it should not introduce host-specific behavior.
|
|
||||||
|
|
||||||
{ config, lib, pkgs, ... }:
|
|
||||||
|
|
||||||
{
|
|
||||||
# Polkit is commonly needed on desktop systems (including Wayland compositors)
|
|
||||||
# for privileged actions (network, power, mounting, etc.).
|
|
||||||
security.polkit.enable = true;
|
|
||||||
|
|
||||||
# Sudo baseline.
|
|
||||||
security.sudo = {
|
|
||||||
enable = true;
|
|
||||||
|
|
||||||
# Hardening: only wheel members can *execute* sudo at all.
|
|
||||||
# This reduces exposure if a non-wheel user exists.
|
|
||||||
execWheelOnly = true;
|
|
||||||
|
|
||||||
# Keep password requirement (safer baseline).
|
|
||||||
# If you want passwordless sudo for wheel, override elsewhere.
|
|
||||||
wheelNeedsPassword = true;
|
|
||||||
|
|
||||||
# Optional: sane defaults; adjust as you like.
|
|
||||||
extraConfig = ''
|
|
||||||
Defaults timestamp_timeout=5
|
|
||||||
Defaults pwfeedback
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
|
|
||||||
# If you want to fully manage users declaratively (stronger security posture),
|
|
||||||
# you can enable this — but it can surprise you if you expect to use `passwd`.
|
|
||||||
# users.mutableUsers = false;
|
|
||||||
}
|
|
||||||
@@ -1,29 +0,0 @@
|
|||||||
{ config, pkgs, lib, ... }:
|
|
||||||
|
|
||||||
let
|
|
||||||
username = "henrov";
|
|
||||||
initialpwd= "Welkom01!";
|
|
||||||
moduleName = "nixos-users";
|
|
||||||
in
|
|
||||||
{
|
|
||||||
users.users.${username} = {
|
|
||||||
#initialPassword = initialpwd;
|
|
||||||
isNormalUser = true;
|
|
||||||
|
|
||||||
# Add your user to groups needed for admin + network + typical desktop input/video access
|
|
||||||
extraGroups = [
|
|
||||||
"wheel"
|
|
||||||
"networkmanager"
|
|
||||||
"video"
|
|
||||||
"input"
|
|
||||||
"audio"
|
|
||||||
];
|
|
||||||
|
|
||||||
# If you want zsh explicitly per-user (instead of defaultUserShell):
|
|
||||||
# shell = pkgs.zsh;
|
|
||||||
};
|
|
||||||
|
|
||||||
# If you want a simple "proof this module was applied" marker at the *system* level:
|
|
||||||
# (This creates /etc/nixos-users.loaded)
|
|
||||||
environment.etc."nixos-users.loaded".text = "loaded\n";
|
|
||||||
}
|
|
||||||
@@ -1,60 +0,0 @@
|
|||||||
# ~/nixos/modules/nixos/desktop/audio.nix
|
|
||||||
#
|
|
||||||
# Baseline audio stack:
|
|
||||||
# - PipeWire as the audio server
|
|
||||||
# - PulseAudio compatibility via pipewire-pulse
|
|
||||||
# - ALSA compatibility (+ 32-bit ALSA for games/legacy)
|
|
||||||
# - WirePlumber session manager
|
|
||||||
# - RTKit for better realtime scheduling (often reduces crackling under load)
|
|
||||||
#
|
|
||||||
# IMPORTANT (NixOS option churn):
|
|
||||||
# - On some nixpkgs revisions the old `hardware.pulseaudio` option was renamed to
|
|
||||||
# `services.pulseaudio`. We set the *services* one explicitly.
|
|
||||||
# - Avoid `lib.mkForce` on pulseaudio enable/disable here because certain revisions
|
|
||||||
# have had type/override weirdness; use plain booleans instead.
|
|
||||||
|
|
||||||
{ config, lib, pkgs, ... }:
|
|
||||||
|
|
||||||
let
|
|
||||||
moduleName = "nixos-audio";
|
|
||||||
in
|
|
||||||
{
|
|
||||||
# ---- Disable the standalone PulseAudio daemon ----
|
|
||||||
#
|
|
||||||
# We want PipeWire to provide PulseAudio compatibility (pipewire-pulse),
|
|
||||||
# not a separate pulseaudio service.
|
|
||||||
services.pulseaudio.enable = false;
|
|
||||||
|
|
||||||
# ---- PipeWire ----
|
|
||||||
services.pipewire = {
|
|
||||||
enable = true;
|
|
||||||
|
|
||||||
# PulseAudio compatibility server (pipewire-pulse)
|
|
||||||
pulse.enable = true;
|
|
||||||
|
|
||||||
# ALSA compatibility (+ 32-bit for Steam/older apps)
|
|
||||||
alsa = {
|
|
||||||
enable = true;
|
|
||||||
support32Bit = true;
|
|
||||||
};
|
|
||||||
|
|
||||||
# Recommended policy/session manager
|
|
||||||
wireplumber.enable = true;
|
|
||||||
|
|
||||||
# Optional JACK compatibility (leave off unless you need it)
|
|
||||||
jack.enable = false;
|
|
||||||
};
|
|
||||||
|
|
||||||
# Realtime scheduling broker commonly used by PipeWire
|
|
||||||
security.rtkit.enable = true;
|
|
||||||
|
|
||||||
# Useful tooling
|
|
||||||
environment.systemPackages = with pkgs; [
|
|
||||||
pavucontrol
|
|
||||||
helvum
|
|
||||||
alsa-utils
|
|
||||||
];
|
|
||||||
|
|
||||||
# Breadcrumb for debugging module load order
|
|
||||||
environment.etc."nixlog/loaded.${moduleName}".text = "loaded\n";
|
|
||||||
}
|
|
||||||
@@ -1,91 +0,0 @@
|
|||||||
{ config, pkgs, lib, ... }:
|
|
||||||
|
|
||||||
let
|
|
||||||
cfg = config.desktop.greeter;
|
|
||||||
in
|
|
||||||
{
|
|
||||||
options.desktop.greeter = {
|
|
||||||
enable = lib.mkEnableOption "greetd + tuigreet greeter (starts Hyprland)";
|
|
||||||
|
|
||||||
greeterConfSource = lib.mkOption {
|
|
||||||
type = lib.types.path;
|
|
||||||
default = ../../../files/conf/greeter/greeter.conf;
|
|
||||||
description = "Path to greeter.conf in your repo; will be installed to /etc/xdg/greeter/greeter.conf";
|
|
||||||
};
|
|
||||||
|
|
||||||
vt = lib.mkOption {
|
|
||||||
type = lib.types.int;
|
|
||||||
default = 1;
|
|
||||||
description = "Virtual terminal (VT) greetd runs on (typically 1).";
|
|
||||||
};
|
|
||||||
|
|
||||||
extraArgs = lib.mkOption {
|
|
||||||
type = lib.types.listOf lib.types.str;
|
|
||||||
default = [ "--time" "--remember" "--remember-session" "--asterisks" ];
|
|
||||||
description = "Extra command-line arguments passed to tuigreet.";
|
|
||||||
};
|
|
||||||
|
|
||||||
useDbusRunSession = lib.mkOption {
|
|
||||||
type = lib.types.bool;
|
|
||||||
default = true;
|
|
||||||
description = "Wrap Hyprland with dbus-run-session (often helps session env).";
|
|
||||||
};
|
|
||||||
|
|
||||||
installGreeterPackages = lib.mkOption {
|
|
||||||
type = lib.types.bool;
|
|
||||||
default = true;
|
|
||||||
description = "Add tuigreet (and optional qtgreet) to systemPackages.";
|
|
||||||
};
|
|
||||||
|
|
||||||
enableTty1Fix = lib.mkOption {
|
|
||||||
type = lib.types.bool;
|
|
||||||
default = true;
|
|
||||||
description = "Ensure greetd owns tty1 (avoids boot console overriding greetd).";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
config = lib.mkIf cfg.enable {
|
|
||||||
# greetd + tuigreet configuration
|
|
||||||
services.greetd = {
|
|
||||||
enable = true;
|
|
||||||
settings = {
|
|
||||||
terminal.vt = cfg.vt;
|
|
||||||
|
|
||||||
default_session = {
|
|
||||||
# greetd service runs the greeter as this user
|
|
||||||
user = "greetd";
|
|
||||||
|
|
||||||
# Build: tuigreet ... --cmd <Hyprland>
|
|
||||||
command =
|
|
||||||
let
|
|
||||||
hyprCmd =
|
|
||||||
if cfg.useDbusRunSession
|
|
||||||
then "${pkgs.dbus}/bin/dbus-run-session ${pkgs.hyprland}/bin/Hyprland"
|
|
||||||
else "${pkgs.hyprland}/bin/Hyprland";
|
|
||||||
|
|
||||||
tuigreetArgs = lib.concatStringsSep " " cfg.extraArgs;
|
|
||||||
in
|
|
||||||
"${pkgs.tuigreet}/bin/tuigreet ${tuigreetArgs} --cmd ${hyprCmd}";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
# Install your custom greeter config into /etc/xdg/greeter/greeter.conf
|
|
||||||
environment.etc."xdg/greeter/greeter.conf".source = cfg.greeterConfSource;
|
|
||||||
|
|
||||||
# Supporting bits (Wayland sessions almost always want these)
|
|
||||||
services.dbus.enable = lib.mkDefault true;
|
|
||||||
security.polkit.enable = lib.mkDefault true;
|
|
||||||
|
|
||||||
# Optional: keep greeter tools available system-wide
|
|
||||||
environment.systemPackages = lib.mkIf cfg.installGreeterPackages (with pkgs; [
|
|
||||||
tuigreet
|
|
||||||
qtgreet
|
|
||||||
]);
|
|
||||||
|
|
||||||
# Fix "Graphical System started" but no greeter: ensure tty1 isn’t stolen by console/getty
|
|
||||||
boot.kernelParams = lib.mkIf cfg.enableTty1Fix [ "console=tty1" ];
|
|
||||||
systemd.services."getty@tty1".enable = lib.mkIf cfg.enableTty1Fix false;
|
|
||||||
systemd.services."autovt@tty1".enable = lib.mkIf cfg.enableTty1Fix false;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -1,67 +0,0 @@
|
|||||||
# Atomic responsibility:
|
|
||||||
# - System-wide XDG basics
|
|
||||||
# - System-wide xdg-desktop-portal + chosen backends
|
|
||||||
# - A sane portals.conf selection (prevents “wrong backend” surprises)
|
|
||||||
#
|
|
||||||
# Notes:
|
|
||||||
# - Keep ALL portal-related config here (do not also configure xdg.portal in wm-hyprland.nix).
|
|
||||||
# - xdg.portal.config.common sets defaults via portals.conf(5) and is supported by NixOS. :contentReference[oaicite:0]{index=0}
|
|
||||||
# - If you enable xdg.portal.wlr.enable elsewhere, it auto-adds xdg-desktop-portal-wlr to extraPortals. :contentReference[oaicite:1]{index=1}
|
|
||||||
# (We do NOT do that here because Hyprland typically uses xdg-desktop-portal-hyprland instead.)
|
|
||||||
# - xdg-desktop-portal-gtk is commonly needed for OpenURI/FileChooser support. :contentReference[oaicite:2]{index=2}
|
|
||||||
|
|
||||||
{ config, lib, pkgs, ... }:
|
|
||||||
{
|
|
||||||
##########################################################################
|
|
||||||
# XDG basics (system)
|
|
||||||
##########################################################################
|
|
||||||
xdg = {
|
|
||||||
menus.enable = true;
|
|
||||||
mime.enable = true;
|
|
||||||
};
|
|
||||||
|
|
||||||
##########################################################################
|
|
||||||
# Portals (system)
|
|
||||||
##########################################################################
|
|
||||||
xdg.portal = {
|
|
||||||
enable = true;
|
|
||||||
|
|
||||||
# Prefer Hyprland portal for compositor-integrated features (screensharing, etc),
|
|
||||||
# and GTK for things like OpenURI/FileChooser compatibility.
|
|
||||||
extraPortals = with pkgs; [
|
|
||||||
xdg-desktop-portal-hyprland
|
|
||||||
xdg-desktop-portal-gtk
|
|
||||||
];
|
|
||||||
|
|
||||||
# Explicit portal routing via portals.conf (prevents “random backend chosen” issues).
|
|
||||||
# This writes /etc/xdg/xdg-desktop-portal/portals.conf. :contentReference[oaicite:3]{index=3}
|
|
||||||
config.common = {
|
|
||||||
# Default backend order for interfaces where multiple backends exist.
|
|
||||||
default = [ "hyprland" "gtk" ];
|
|
||||||
|
|
||||||
# (Optional, but often helpful) Ensure GTK handles common UX portals reliably.
|
|
||||||
"org.freedesktop.impl.portal.FileChooser" = [ "gtk" ];
|
|
||||||
"org.freedesktop.impl.portal.OpenURI" = [ "gtk" ];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
##########################################################################
|
|
||||||
# Environment defaults (system)
|
|
||||||
##########################################################################
|
|
||||||
environment.sessionVariables = {
|
|
||||||
# Encourage GTK apps to use portals for file picker / open-uri on Wayland.
|
|
||||||
GTK_USE_PORTAL = "1";
|
|
||||||
|
|
||||||
# Desktop identity hints used by some apps / portal logic.
|
|
||||||
# (Set once here; don’t duplicate in HM and NixOS.)
|
|
||||||
XDG_CURRENT_DESKTOP = "Hyprland";
|
|
||||||
XDG_SESSION_DESKTOP = "Hyprland";
|
|
||||||
};
|
|
||||||
|
|
||||||
##########################################################################
|
|
||||||
# Optional: small, non-invasive tooling for troubleshooting
|
|
||||||
##########################################################################
|
|
||||||
environment.systemPackages = with pkgs; lib.mkAfter [
|
|
||||||
xdg-utils
|
|
||||||
];
|
|
||||||
}
|
|
||||||
@@ -1,17 +0,0 @@
|
|||||||
{ config, lib, pkgs, ... }:
|
|
||||||
|
|
||||||
let
|
|
||||||
repoHyprDir = ../../../files/conf/hypr;
|
|
||||||
in
|
|
||||||
{
|
|
||||||
programs.hyprland.enable = true;
|
|
||||||
|
|
||||||
services.dbus.enable = lib.mkDefault true;
|
|
||||||
security.polkit.enable = lib.mkDefault true;
|
|
||||||
|
|
||||||
# Publish to XDG config dir so Hyprland finds it
|
|
||||||
environment.etc."xdg/hypr".source = repoHyprDir;
|
|
||||||
|
|
||||||
# Optional breadcrumb
|
|
||||||
environment.etc."nixlog/loaded.nixos-desktop-wm-hyprland".text = "loaded\n";
|
|
||||||
}
|
|
||||||
@@ -1,57 +0,0 @@
|
|||||||
{ config, lib, pkgs, ... }:
|
|
||||||
|
|
||||||
let
|
|
||||||
moduleName = "nixos-firewall";
|
|
||||||
|
|
||||||
# Why:
|
|
||||||
# - You had LAN-specific allow rules. Keeping the CIDR as a single variable
|
|
||||||
# makes it easy to override per-host or per-network later.
|
|
||||||
#
|
|
||||||
# If your LAN changes, override this value in hosts/<host>/networking.nix.
|
|
||||||
homeLanCidr = "192.168.2.0/24";
|
|
||||||
in
|
|
||||||
{
|
|
||||||
# Why:
|
|
||||||
# - Use nftables backend (modern default direction).
|
|
||||||
# - Matches your existing config and plays nicely with custom rules.
|
|
||||||
networking.nftables.enable = true;
|
|
||||||
|
|
||||||
networking.firewall = {
|
|
||||||
enable = true;
|
|
||||||
|
|
||||||
# Why:
|
|
||||||
# - Strong baseline: nothing inbound is open unless explicitly allowed.
|
|
||||||
# - You then selectively allow what you need (SSH ports live in sshd.nix).
|
|
||||||
allowedTCPPorts = [ ];
|
|
||||||
allowedUDPPorts = [ ];
|
|
||||||
|
|
||||||
# Why:
|
|
||||||
# - These are “quality of life” LAN services you had already:
|
|
||||||
# - KDE Connect: TCP/UDP 1714-1764
|
|
||||||
# - mDNS: UDP 5353 (printer discovery / Avahi-style discovery)
|
|
||||||
#
|
|
||||||
# Notes:
|
|
||||||
# - These rules ONLY allow traffic originating from homeLanCidr.
|
|
||||||
# - On other networks they effectively do nothing.
|
|
||||||
# - If you don’t use KDE Connect or mDNS, delete these blocks.
|
|
||||||
extraInputRules = ''
|
|
||||||
# KDE Connect (TCP/UDP 1714-1764) from home LAN
|
|
||||||
ip saddr ${homeLanCidr} tcp dport 1714-1764 accept
|
|
||||||
ip saddr ${homeLanCidr} udp dport 1714-1764 accept
|
|
||||||
|
|
||||||
# mDNS / discovery (UDP 5353) from home LAN
|
|
||||||
ip saddr ${homeLanCidr} udp dport 5353 accept
|
|
||||||
'';
|
|
||||||
|
|
||||||
# Optional baseline knobs (kept conservative):
|
|
||||||
#
|
|
||||||
# Why:
|
|
||||||
# - Logging refused packets can be noisy on laptops that roam networks.
|
|
||||||
# - Leave disabled by default; enable temporarily for debugging.
|
|
||||||
logRefusedConnections = lib.mkDefault false;
|
|
||||||
};
|
|
||||||
|
|
||||||
# Optional: leave a breadcrumb in /etc for debugging module load order
|
|
||||||
# (handy while refactoring; remove once stable).
|
|
||||||
environment.etc."nixlog/loaded.${moduleName}".text = "loaded\n";
|
|
||||||
}
|
|
||||||
@@ -1,34 +0,0 @@
|
|||||||
{ config, lib, pkgs, ... }:
|
|
||||||
|
|
||||||
{
|
|
||||||
# Keep NetworkManager off (avoids nm-applet + keyring + agent ecosystem)
|
|
||||||
networking.networkmanager.enable = false;
|
|
||||||
|
|
||||||
# iwd provides Wi-Fi auth/roaming; configurable via networking.wireless.iwd.settings
|
|
||||||
networking.wireless.iwd = {
|
|
||||||
enable = true;
|
|
||||||
|
|
||||||
# Optional but useful defaults
|
|
||||||
settings = {
|
|
||||||
Settings = {
|
|
||||||
AutoConnect = true;
|
|
||||||
};
|
|
||||||
Network = {
|
|
||||||
EnableIPv6 = true;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
# GUI (with tray indicator via `iwgtk -i`)
|
|
||||||
environment.systemPackages = with pkgs; [
|
|
||||||
iwd
|
|
||||||
iwgtk
|
|
||||||
];
|
|
||||||
|
|
||||||
# Allow non-root Wi-Fi control (common pattern for iwd tooling)
|
|
||||||
users.users.henrov.extraGroups = [ "netdev" ];
|
|
||||||
|
|
||||||
# Ensure you still get IP addresses (default on NixOS is usually OK,
|
|
||||||
# but this makes it explicit)
|
|
||||||
networking.useDHCP = lib.mkDefault true;
|
|
||||||
}
|
|
||||||
@@ -1,35 +0,0 @@
|
|||||||
{ config, lib, pkgs, ... }:
|
|
||||||
|
|
||||||
let
|
|
||||||
moduleName = "nixos-printers";
|
|
||||||
in
|
|
||||||
{
|
|
||||||
# ---- Printing (CUPS) ----
|
|
||||||
services.printing = {
|
|
||||||
enable = true;
|
|
||||||
# Good general compatibility. Many modern printers work driverless (IPP Everywhere),
|
|
||||||
# but these help with older models and various formats.
|
|
||||||
drivers = with pkgs; [
|
|
||||||
cups-filters
|
|
||||||
gutenprint
|
|
||||||
];
|
|
||||||
};
|
|
||||||
|
|
||||||
# ---- Network printer discovery (mDNS / DNS-SD) ----
|
|
||||||
services.avahi = {
|
|
||||||
enable = true;
|
|
||||||
# Resolve .local names + discover services on IPv4
|
|
||||||
nssmdns4 = true;
|
|
||||||
# You're controlling firewall rules in firewall.nix
|
|
||||||
openFirewall = false;
|
|
||||||
};
|
|
||||||
|
|
||||||
# ---- Optional GUI tool to add/manage printers ----
|
|
||||||
environment.systemPackages = with pkgs; [
|
|
||||||
system-config-printer
|
|
||||||
];
|
|
||||||
|
|
||||||
# allow admin actions in printer GUI (usually already present on desktop systems)
|
|
||||||
security.polkit.enable = true;
|
|
||||||
environment.etc."nixlog/loaded.${moduleName}".text = "loaded\n";
|
|
||||||
}
|
|
||||||
@@ -1,18 +0,0 @@
|
|||||||
# SSH client only (no server).
|
|
||||||
# - Installs OpenSSH client tools (ssh, scp, sftp, ssh-keygen, etc.)
|
|
||||||
# - Enables ssh-agent for user sessions
|
|
||||||
|
|
||||||
{ config, lib, pkgs, ... }:
|
|
||||||
|
|
||||||
{
|
|
||||||
# Install the OpenSSH client tools
|
|
||||||
environment.systemPackages = with pkgs; [
|
|
||||||
#openssh
|
|
||||||
];
|
|
||||||
|
|
||||||
# Start ssh-agent automatically for users (handy baseline)
|
|
||||||
programs.ssh.startAgent = true;
|
|
||||||
|
|
||||||
# Explicitly ensure the SSH server is NOT enabled
|
|
||||||
services.openssh.enable = false;
|
|
||||||
}
|
|
||||||
@@ -1,551 +0,0 @@
|
|||||||
{
|
|
||||||
"nodes": {
|
|
||||||
"aquamarine": {
|
|
||||||
"inputs": {
|
|
||||||
"hyprutils": [
|
|
||||||
"hyprland",
|
|
||||||
"hyprutils"
|
|
||||||
],
|
|
||||||
"hyprwayland-scanner": [
|
|
||||||
"hyprland",
|
|
||||||
"hyprwayland-scanner"
|
|
||||||
],
|
|
||||||
"nixpkgs": [
|
|
||||||
"hyprland",
|
|
||||||
"nixpkgs"
|
|
||||||
],
|
|
||||||
"systems": [
|
|
||||||
"hyprland",
|
|
||||||
"systems"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1770411700,
|
|
||||||
"narHash": "sha256-VpeOlyospHF+vxE+xEGEy0utMN0d/FUDvD2dOg9ZiIo=",
|
|
||||||
"owner": "hyprwm",
|
|
||||||
"repo": "aquamarine",
|
|
||||||
"rev": "b91f570bb7885df9e4a512d6e95a13960a5bdca0",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "hyprwm",
|
|
||||||
"repo": "aquamarine",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"flake-compat": {
|
|
||||||
"flake": false,
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1767039857,
|
|
||||||
"narHash": "sha256-vNpUSpF5Nuw8xvDLj2KCwwksIbjua2LZCqhV1LNRDns=",
|
|
||||||
"owner": "NixOS",
|
|
||||||
"repo": "flake-compat",
|
|
||||||
"rev": "5edf11c44bc78a0d334f6334cdaf7d60d732daab",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "NixOS",
|
|
||||||
"repo": "flake-compat",
|
|
||||||
"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"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"home-manager": {
|
|
||||||
"inputs": {
|
|
||||||
"nixpkgs": [
|
|
||||||
"nixpkgs"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1770915843,
|
|
||||||
"narHash": "sha256-ZwU5wXKNqpOQvjNz6aBp1j5peiBZow1++6pLnk5VAhs=",
|
|
||||||
"owner": "nix-community",
|
|
||||||
"repo": "home-manager",
|
|
||||||
"rev": "6a1f7101d2c3ee87d485a87880d73b4665c6a4bd",
|
|
||||||
"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": 1770511807,
|
|
||||||
"narHash": "sha256-suKmSbSk34uPOJDTg/GbPrKEJutzK08vj0VoTvAFBCA=",
|
|
||||||
"owner": "hyprwm",
|
|
||||||
"repo": "hyprgraphics",
|
|
||||||
"rev": "7c75487edd43a71b61adb01cae8326d277aab683",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "hyprwm",
|
|
||||||
"repo": "hyprgraphics",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"hyprland": {
|
|
||||||
"inputs": {
|
|
||||||
"aquamarine": "aquamarine",
|
|
||||||
"hyprcursor": "hyprcursor",
|
|
||||||
"hyprgraphics": "hyprgraphics",
|
|
||||||
"hyprland-guiutils": "hyprland-guiutils",
|
|
||||||
"hyprland-protocols": "hyprland-protocols",
|
|
||||||
"hyprlang": "hyprlang",
|
|
||||||
"hyprutils": "hyprutils",
|
|
||||||
"hyprwayland-scanner": "hyprwayland-scanner",
|
|
||||||
"hyprwire": "hyprwire",
|
|
||||||
"nixpkgs": [
|
|
||||||
"nixpkgs"
|
|
||||||
],
|
|
||||||
"pre-commit-hooks": "pre-commit-hooks",
|
|
||||||
"systems": "systems",
|
|
||||||
"xdph": "xdph"
|
|
||||||
},
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1770847962,
|
|
||||||
"narHash": "sha256-nNE++7RzSdpKwE2sUV3P9q7/8qQQLZBzOjncyeTv55A=",
|
|
||||||
"owner": "hyprwm",
|
|
||||||
"repo": "HyprLand",
|
|
||||||
"rev": "81a029e5049853481c36379caeb1fa1beeb097ee",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "hyprwm",
|
|
||||||
"repo": "HyprLand",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"hyprland-guiutils": {
|
|
||||||
"inputs": {
|
|
||||||
"aquamarine": [
|
|
||||||
"hyprland",
|
|
||||||
"aquamarine"
|
|
||||||
],
|
|
||||||
"hyprgraphics": [
|
|
||||||
"hyprland",
|
|
||||||
"hyprgraphics"
|
|
||||||
],
|
|
||||||
"hyprlang": [
|
|
||||||
"hyprland",
|
|
||||||
"hyprlang"
|
|
||||||
],
|
|
||||||
"hyprtoolkit": "hyprtoolkit",
|
|
||||||
"hyprutils": [
|
|
||||||
"hyprland",
|
|
||||||
"hyprutils"
|
|
||||||
],
|
|
||||||
"hyprwayland-scanner": [
|
|
||||||
"hyprland",
|
|
||||||
"hyprwayland-scanner"
|
|
||||||
],
|
|
||||||
"nixpkgs": [
|
|
||||||
"hyprland",
|
|
||||||
"nixpkgs"
|
|
||||||
],
|
|
||||||
"systems": [
|
|
||||||
"hyprland",
|
|
||||||
"systems"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1767023960,
|
|
||||||
"narHash": "sha256-R2HgtVS1G3KSIKAQ77aOZ+Q0HituOmPgXW9nBNkpp3Q=",
|
|
||||||
"owner": "hyprwm",
|
|
||||||
"repo": "hyprland-guiutils",
|
|
||||||
"rev": "c2e906261142f5dd1ee0bfc44abba23e2754c660",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "hyprwm",
|
|
||||||
"repo": "hyprland-guiutils",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"hyprland-plugins": {
|
|
||||||
"inputs": {
|
|
||||||
"hyprland": [
|
|
||||||
"hyprland"
|
|
||||||
],
|
|
||||||
"nixpkgs": [
|
|
||||||
"hyprland-plugins",
|
|
||||||
"hyprland",
|
|
||||||
"nixpkgs"
|
|
||||||
],
|
|
||||||
"systems": [
|
|
||||||
"hyprland-plugins",
|
|
||||||
"hyprland",
|
|
||||||
"systems"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1770899531,
|
|
||||||
"narHash": "sha256-UBrWjh0DR8db60aLNkTnZTJ9F4kWK0Y7rUDNJC88W7A=",
|
|
||||||
"owner": "hyprwm",
|
|
||||||
"repo": "hyprland-plugins",
|
|
||||||
"rev": "e03c34ccd51280a44ea6d1f5c040cd81ecca25ed",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "hyprwm",
|
|
||||||
"repo": "hyprland-plugins",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"hyprland-protocols": {
|
|
||||||
"inputs": {
|
|
||||||
"nixpkgs": [
|
|
||||||
"hyprland",
|
|
||||||
"nixpkgs"
|
|
||||||
],
|
|
||||||
"systems": [
|
|
||||||
"hyprland",
|
|
||||||
"systems"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1765214753,
|
|
||||||
"narHash": "sha256-P9zdGXOzToJJgu5sVjv7oeOGPIIwrd9hAUAP3PsmBBs=",
|
|
||||||
"owner": "hyprwm",
|
|
||||||
"repo": "hyprland-protocols",
|
|
||||||
"rev": "3f3860b869014c00e8b9e0528c7b4ddc335c21ab",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "hyprwm",
|
|
||||||
"repo": "hyprland-protocols",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"hyprlang": {
|
|
||||||
"inputs": {
|
|
||||||
"hyprutils": [
|
|
||||||
"hyprland",
|
|
||||||
"hyprutils"
|
|
||||||
],
|
|
||||||
"nixpkgs": [
|
|
||||||
"hyprland",
|
|
||||||
"nixpkgs"
|
|
||||||
],
|
|
||||||
"systems": [
|
|
||||||
"hyprland",
|
|
||||||
"systems"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1767983607,
|
|
||||||
"narHash": "sha256-8C2co8NYfR4oMOUEsPROOJ9JHrv9/ktbJJ6X1WsTbXc=",
|
|
||||||
"owner": "hyprwm",
|
|
||||||
"repo": "hyprlang",
|
|
||||||
"rev": "d4037379e6057246b408bbcf796cf3e9838af5b2",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "hyprwm",
|
|
||||||
"repo": "hyprlang",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"hyprtoolkit": {
|
|
||||||
"inputs": {
|
|
||||||
"aquamarine": [
|
|
||||||
"hyprland",
|
|
||||||
"hyprland-guiutils",
|
|
||||||
"aquamarine"
|
|
||||||
],
|
|
||||||
"hyprgraphics": [
|
|
||||||
"hyprland",
|
|
||||||
"hyprland-guiutils",
|
|
||||||
"hyprgraphics"
|
|
||||||
],
|
|
||||||
"hyprlang": [
|
|
||||||
"hyprland",
|
|
||||||
"hyprland-guiutils",
|
|
||||||
"hyprlang"
|
|
||||||
],
|
|
||||||
"hyprutils": [
|
|
||||||
"hyprland",
|
|
||||||
"hyprland-guiutils",
|
|
||||||
"hyprutils"
|
|
||||||
],
|
|
||||||
"hyprwayland-scanner": [
|
|
||||||
"hyprland",
|
|
||||||
"hyprland-guiutils",
|
|
||||||
"hyprwayland-scanner"
|
|
||||||
],
|
|
||||||
"nixpkgs": [
|
|
||||||
"hyprland",
|
|
||||||
"hyprland-guiutils",
|
|
||||||
"nixpkgs"
|
|
||||||
],
|
|
||||||
"systems": [
|
|
||||||
"hyprland",
|
|
||||||
"hyprland-guiutils",
|
|
||||||
"systems"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1764592794,
|
|
||||||
"narHash": "sha256-7CcO+wbTJ1L1NBQHierHzheQGPWwkIQug/w+fhTAVuU=",
|
|
||||||
"owner": "hyprwm",
|
|
||||||
"repo": "hyprtoolkit",
|
|
||||||
"rev": "5cfe0743f0e608e1462972303778d8a0859ee63e",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "hyprwm",
|
|
||||||
"repo": "hyprtoolkit",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"hyprutils": {
|
|
||||||
"inputs": {
|
|
||||||
"nixpkgs": [
|
|
||||||
"hyprland",
|
|
||||||
"nixpkgs"
|
|
||||||
],
|
|
||||||
"systems": [
|
|
||||||
"hyprland",
|
|
||||||
"systems"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1770139857,
|
|
||||||
"narHash": "sha256-bCqxcXjavgz5KBJ/1CBLqnagMMf9JvU1m9HmYVASKoc=",
|
|
||||||
"owner": "hyprwm",
|
|
||||||
"repo": "hyprutils",
|
|
||||||
"rev": "9038eec033843c289b06b83557a381a2648d8fa5",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "hyprwm",
|
|
||||||
"repo": "hyprutils",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"hyprwayland-scanner": {
|
|
||||||
"inputs": {
|
|
||||||
"nixpkgs": [
|
|
||||||
"hyprland",
|
|
||||||
"nixpkgs"
|
|
||||||
],
|
|
||||||
"systems": [
|
|
||||||
"hyprland",
|
|
||||||
"systems"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1770501770,
|
|
||||||
"narHash": "sha256-NWRM6+YxTRv+bT9yvlhhJ2iLae1B1pNH3mAL5wi2rlQ=",
|
|
||||||
"owner": "hyprwm",
|
|
||||||
"repo": "hyprwayland-scanner",
|
|
||||||
"rev": "0bd8b6cde9ec27d48aad9e5b4deefb3746909d40",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "hyprwm",
|
|
||||||
"repo": "hyprwayland-scanner",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"hyprwire": {
|
|
||||||
"inputs": {
|
|
||||||
"hyprutils": [
|
|
||||||
"hyprland",
|
|
||||||
"hyprutils"
|
|
||||||
],
|
|
||||||
"nixpkgs": [
|
|
||||||
"hyprland",
|
|
||||||
"nixpkgs"
|
|
||||||
],
|
|
||||||
"systems": [
|
|
||||||
"hyprland",
|
|
||||||
"systems"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1770203293,
|
|
||||||
"narHash": "sha256-PR/KER+yiHabFC/h1Wjb+9fR2Uy0lWM3Qld7jPVaWkk=",
|
|
||||||
"owner": "hyprwm",
|
|
||||||
"repo": "hyprwire",
|
|
||||||
"rev": "37bc90eed02b0c8b5a77a0b00867baf3005cfb98",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "hyprwm",
|
|
||||||
"repo": "hyprwire",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"nixpkgs": {
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1770562336,
|
|
||||||
"narHash": "sha256-ub1gpAONMFsT/GU2hV6ZWJjur8rJ6kKxdm9IlCT0j84=",
|
|
||||||
"owner": "NixOS",
|
|
||||||
"repo": "nixpkgs",
|
|
||||||
"rev": "d6c71932130818840fc8fe9509cf50be8c64634f",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "NixOS",
|
|
||||||
"ref": "nixos-unstable",
|
|
||||||
"repo": "nixpkgs",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"pre-commit-hooks": {
|
|
||||||
"inputs": {
|
|
||||||
"flake-compat": "flake-compat",
|
|
||||||
"gitignore": "gitignore",
|
|
||||||
"nixpkgs": [
|
|
||||||
"hyprland",
|
|
||||||
"nixpkgs"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1769939035,
|
|
||||||
"narHash": "sha256-Fok2AmefgVA0+eprw2NDwqKkPGEI5wvR+twiZagBvrg=",
|
|
||||||
"owner": "cachix",
|
|
||||||
"repo": "git-hooks.nix",
|
|
||||||
"rev": "a8ca480175326551d6c4121498316261cbb5b260",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "cachix",
|
|
||||||
"repo": "git-hooks.nix",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"root": {
|
|
||||||
"inputs": {
|
|
||||||
"home-manager": "home-manager",
|
|
||||||
"hyprland": "hyprland",
|
|
||||||
"hyprland-plugins": "hyprland-plugins",
|
|
||||||
"nixpkgs": "nixpkgs"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"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"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"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": 1761431178,
|
|
||||||
"narHash": "sha256-xzjC1CV3+wpUQKNF+GnadnkeGUCJX+vgaWIZsnz9tzI=",
|
|
||||||
"owner": "hyprwm",
|
|
||||||
"repo": "xdg-desktop-portal-hyprland",
|
|
||||||
"rev": "4b8801228ff958d028f588f0c2b911dbf32297f9",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "hyprwm",
|
|
||||||
"repo": "xdg-desktop-portal-hyprland",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"root": "root",
|
|
||||||
"version": 7
|
|
||||||
}
|
|
||||||
@@ -1,59 +0,0 @@
|
|||||||
{
|
|
||||||
description = "NixOS + Home Manager configuration";
|
|
||||||
|
|
||||||
inputs = {
|
|
||||||
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
|
|
||||||
|
|
||||||
hyprland = {
|
|
||||||
url = "github:hyprwm/HyprLand";
|
|
||||||
inputs.nixpkgs.follows = "nixpkgs";
|
|
||||||
};
|
|
||||||
|
|
||||||
hyprland-plugins = {
|
|
||||||
url = "github:hyprwm/hyprland-plugins";
|
|
||||||
inputs.hyprland.follows = "hyprland";
|
|
||||||
};
|
|
||||||
|
|
||||||
home-manager = {
|
|
||||||
# consider pinning explicitly, e.g.:
|
|
||||||
# url = "github:nix-community/home-manager/release-25.05";
|
|
||||||
url = "github:nix-community/home-manager";
|
|
||||||
inputs.nixpkgs.follows = "nixpkgs";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
outputs = inputs @ { self, nixpkgs, home-manager, ... }:
|
|
||||||
let
|
|
||||||
system = "x86_64-linux";
|
|
||||||
lib = nixpkgs.lib;
|
|
||||||
|
|
||||||
mkHost = host: lib.nixosSystem {
|
|
||||||
inherit system;
|
|
||||||
specialArgs = { inherit inputs; };
|
|
||||||
|
|
||||||
modules = [
|
|
||||||
./hosts/${host}/hardware-configuration.nix
|
|
||||||
./hosts/${host}/configuration.nix
|
|
||||||
|
|
||||||
home-manager.nixosModules.home-manager
|
|
||||||
{
|
|
||||||
home-manager.useGlobalPkgs = true;
|
|
||||||
home-manager.useUserPackages = true;
|
|
||||||
home-manager.backupFileExtension = "bak";
|
|
||||||
home-manager.extraSpecialArgs = { inherit inputs; };
|
|
||||||
|
|
||||||
# If you prefer to wire HM user(s) here globally, uncomment:
|
|
||||||
home-manager.users.henrov = import ./home/henrov/home.nix;
|
|
||||||
}
|
|
||||||
];
|
|
||||||
};
|
|
||||||
in
|
|
||||||
{
|
|
||||||
nixosConfigurations = {
|
|
||||||
traveldroid = mkHost "traveldroid";
|
|
||||||
};
|
|
||||||
|
|
||||||
packages.${system}.default =
|
|
||||||
self.nixosConfigurations.traveldroid.config.system.build.toplevel;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -1,11 +0,0 @@
|
|||||||
{ config, pkgs, ... }:
|
|
||||||
|
|
||||||
{
|
|
||||||
imports = [
|
|
||||||
../../modules/home-manager/base.nix
|
|
||||||
];
|
|
||||||
|
|
||||||
home.username = "henrov";
|
|
||||||
home.homeDirectory = "/home/henrov";
|
|
||||||
home.stateVersion = "25.05";
|
|
||||||
}
|
|
||||||
@@ -1,28 +0,0 @@
|
|||||||
{ config, pkgs, lib, ... }:
|
|
||||||
|
|
||||||
|
|
||||||
{
|
|
||||||
imports = [
|
|
||||||
../../modules/nixos/base.nix
|
|
||||||
./hardware-configuration.nix
|
|
||||||
];
|
|
||||||
|
|
||||||
# Bootloader
|
|
||||||
boot.loader.systemd-boot.enable = true;
|
|
||||||
boot.loader.efi.canTouchEfiVariables = true;
|
|
||||||
|
|
||||||
system.stateVersion = "25.11";
|
|
||||||
|
|
||||||
# Basic system identity / networking
|
|
||||||
networking.hostName = "traveldroid";
|
|
||||||
networking.networkmanager.enable = true;
|
|
||||||
|
|
||||||
# Keyboard (Xwayland / X11 apps)
|
|
||||||
services.xserver.xkb = {
|
|
||||||
layout = "us";
|
|
||||||
variant = "";
|
|
||||||
};
|
|
||||||
|
|
||||||
# Enable flakes
|
|
||||||
nix.settings.experimental-features = [ "nix-command" "flakes" ];
|
|
||||||
}
|
|
||||||
@@ -1,40 +0,0 @@
|
|||||||
# Do not modify this file! It was generated by ‘nixos-generate-config’
|
|
||||||
# and may be overwritten by future invocations. Please make changes
|
|
||||||
# to /etc/nixos/configuration.nix instead.
|
|
||||||
{ config, lib, pkgs, modulesPath, ... }:
|
|
||||||
|
|
||||||
{
|
|
||||||
imports =
|
|
||||||
[ (modulesPath + "/installer/scan/not-detected.nix")
|
|
||||||
];
|
|
||||||
|
|
||||||
boot.initrd.availableKernelModules = [ "xhci_pci" "nvme" "usb_storage" "sd_mod" "rtsx_usb_sdmmc" ];
|
|
||||||
boot.initrd.kernelModules = [ ];
|
|
||||||
boot.kernelModules = [ "kvm-intel" ];
|
|
||||||
boot.extraModulePackages = [ ];
|
|
||||||
|
|
||||||
fileSystems."/" =
|
|
||||||
{ device = "/dev/disk/by-uuid/f08fc2a7-0b2b-4cbb-a65a-8b6e7ee4cec9";
|
|
||||||
fsType = "btrfs";
|
|
||||||
options = [ "subvol=@" ];
|
|
||||||
};
|
|
||||||
|
|
||||||
fileSystems."/home" =
|
|
||||||
{ device = "/dev/disk/by-uuid/f08fc2a7-0b2b-4cbb-a65a-8b6e7ee4cec9";
|
|
||||||
fsType = "btrfs";
|
|
||||||
options = [ "subvol=@home" ];
|
|
||||||
};
|
|
||||||
|
|
||||||
fileSystems."/boot" =
|
|
||||||
{ device = "/dev/disk/by-uuid/25C1-E4F2";
|
|
||||||
fsType = "vfat";
|
|
||||||
options = [ "fmask=0077" "dmask=0077" ];
|
|
||||||
};
|
|
||||||
|
|
||||||
swapDevices =
|
|
||||||
[ { device = "/dev/disk/by-uuid/f771a317-26a2-4524-a458-42ba22b29e67"; }
|
|
||||||
];
|
|
||||||
|
|
||||||
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
|
|
||||||
hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
|
|
||||||
}
|
|
||||||
@@ -1,97 +0,0 @@
|
|||||||
{ config, lib, pkgs, ... }:
|
|
||||||
|
|
||||||
let
|
|
||||||
moduleName = "hm-backgrounds";
|
|
||||||
src = ../home-manager/conf/backgrounds;
|
|
||||||
video = "${config.home.homeDirectory}/backgrounds/videos/191684-891315375.mp4";
|
|
||||||
startWallpaper = pkgs.writeShellScript "start-video-wallpaper" ''
|
|
||||||
set -euo pipefail
|
|
||||||
|
|
||||||
VIDEO="${video}"
|
|
||||||
MPVPAPER="${pkgs.mpvpaper}/bin/mpvpaper"
|
|
||||||
HYPRCTL="${pkgs.hyprland}/bin/hyprctl"
|
|
||||||
PKILL="${pkgs.procps}/bin/pkill"
|
|
||||||
AWK="${pkgs.gawk}/bin/awk"
|
|
||||||
|
|
||||||
# Avoid stacking multiple instances on rebuild / relogin
|
|
||||||
$PKILL -x mpvpaper || true
|
|
||||||
|
|
||||||
# Wait until Hyprland is ready
|
|
||||||
for i in $(seq 1 30); do
|
|
||||||
if $HYPRCTL monitors >/dev/null 2>&1; then
|
|
||||||
break
|
|
||||||
fi
|
|
||||||
sleep 1
|
|
||||||
done
|
|
||||||
|
|
||||||
# If the file doesn't exist, don't crash-loop forever
|
|
||||||
if [ ! -f "$VIDEO" ]; then
|
|
||||||
echo "Wallpaper video not found: $VIDEO"
|
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Detect monitors
|
|
||||||
MONITORS="$($HYPRCTL monitors | $AWK '/^Monitor/ {print $2}')"
|
|
||||||
if [ -z "$MONITORS" ]; then
|
|
||||||
echo "No monitors detected by hyprctl."
|
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Start mpvpaper per monitor
|
|
||||||
for m in $MONITORS; do
|
|
||||||
$MPVPAPER -o "--loop --no-audio --panscan=1.0 --video-aspect-override=yes" "$m" "$VIDEO" &
|
|
||||||
done
|
|
||||||
|
|
||||||
wait
|
|
||||||
'';
|
|
||||||
in
|
|
||||||
{
|
|
||||||
# 0) Make HM reliably manage/restart user services on switch
|
|
||||||
# (prevents having to run systemctl --user daemon-reload manually)
|
|
||||||
systemd.user.startServices = "sd-switch";
|
|
||||||
|
|
||||||
# 1) Put the whole repo folder into ~/backgrounds
|
|
||||||
home.file."backgrounds".source = src;
|
|
||||||
|
|
||||||
# 2) Ensure dependencies exist
|
|
||||||
home.packages = with pkgs; [
|
|
||||||
mpv
|
|
||||||
mpvpaper
|
|
||||||
procps
|
|
||||||
gawk
|
|
||||||
];
|
|
||||||
|
|
||||||
# 3) Run video wallpaper on ALL monitors
|
|
||||||
#
|
|
||||||
# IMPORTANT:
|
|
||||||
# - Do NOT tie to graphical-session.target / hyprland-session.target, because in your setup
|
|
||||||
# those targets were inactive/missing.
|
|
||||||
# - Instead, start on user login via default.target, and the script itself waits for Hyprland.
|
|
||||||
systemd.user.services.video-wallpaper = {
|
|
||||||
Unit = {
|
|
||||||
Description = "Video wallpaper (mpvpaper) on all Hyprland monitors";
|
|
||||||
};
|
|
||||||
|
|
||||||
Service = {
|
|
||||||
Type = "simple";
|
|
||||||
Restart = "on-failure";
|
|
||||||
RestartSec = 2;
|
|
||||||
|
|
||||||
ExecStart = startWallpaper;
|
|
||||||
};
|
|
||||||
|
|
||||||
Install = {
|
|
||||||
WantedBy = [ "default.target" ];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
# 4) Restart on switch so new /nix/store script paths are picked up
|
|
||||||
# (kept, but now it won’t break boot/login if the user bus isn’t ready)
|
|
||||||
home.activation.restartVideoWallpaper =
|
|
||||||
lib.hm.dag.entryAfter [ "writeBoundary" ] ''
|
|
||||||
${pkgs.systemd}/bin/systemctl --user daemon-reload || true
|
|
||||||
${pkgs.systemd}/bin/systemctl --user reset-failed video-wallpaper || true
|
|
||||||
${pkgs.systemd}/bin/systemctl --user restart video-wallpaper || true
|
|
||||||
'';
|
|
||||||
home.file.".nixlog/loaded.${moduleName}-module-loaded".text = "loaded\n";
|
|
||||||
}
|
|
||||||
@@ -1,39 +0,0 @@
|
|||||||
{ pkgs, ... }:
|
|
||||||
|
|
||||||
let
|
|
||||||
moduleName = "hm-base";
|
|
||||||
in
|
|
||||||
{
|
|
||||||
imports = [
|
|
||||||
./packages.nix
|
|
||||||
./flatpak.nix
|
|
||||||
./greeter.nix
|
|
||||||
./terminal.nix
|
|
||||||
./default-apps.nix
|
|
||||||
./backgrounds.nix
|
|
||||||
./hyprland.nix
|
|
||||||
./hyprshell.nix
|
|
||||||
./waybar.nix
|
|
||||||
];
|
|
||||||
|
|
||||||
programs.vscode = {
|
|
||||||
# enable = true;
|
|
||||||
|
|
||||||
profiles.default.extensions = with pkgs.vscode-extensions; [
|
|
||||||
ms-vscode.cpptools
|
|
||||||
ms-vscode.cmake-tools
|
|
||||||
bbenoist.nix
|
|
||||||
];
|
|
||||||
};
|
|
||||||
|
|
||||||
programs.home-manager.enable = true;
|
|
||||||
wayland.windowManager.hyprland.systemd.enable = true;
|
|
||||||
systemd.user.startServices = "sd-switch";
|
|
||||||
|
|
||||||
home.activation.cleanNixlog = pkgs.lib.hm.dag.entryBefore [ "writeBoundary" ] ''
|
|
||||||
rm -rf "$HOME/.nixlog"
|
|
||||||
mkdir -p "$HOME/.nixlog"
|
|
||||||
'';
|
|
||||||
|
|
||||||
home.file.".nixlog/loaded.${moduleName}-module-loaded".text = "loaded\n";
|
|
||||||
}
|
|
||||||
@@ -1,19 +0,0 @@
|
|||||||
{ pkgs, ... }:
|
|
||||||
|
|
||||||
let
|
|
||||||
moduleName = "hm-bindings";
|
|
||||||
in
|
|
||||||
{
|
|
||||||
xdg.enable = true;
|
|
||||||
|
|
||||||
# Home Manager version of "put a config file in the right XDG place".
|
|
||||||
# This becomes: ~/.config/hypr/bindings.conf
|
|
||||||
xdg.configFile."hypr/bindings.conf".source = ./conf/bindings.conf;
|
|
||||||
|
|
||||||
# Optional: your "loaded" marker
|
|
||||||
home.file.".nixlog/loaded.${moduleName}-module-loaded".text = "loaded\n";
|
|
||||||
|
|
||||||
# NOTE:
|
|
||||||
# keyd is a system daemon; configure it in NixOS (configuration.nix),
|
|
||||||
# not in Home Manager.
|
|
||||||
}
|
|
||||||
@@ -1,13 +0,0 @@
|
|||||||
alias ll='ls -lah'
|
|
||||||
alias gs='git status'
|
|
||||||
alias ga='git add'
|
|
||||||
alias gc='git commit'
|
|
||||||
alias rebuild='sudo nixos-rebuild switch --flake ~/nixos#traveldroid'
|
|
||||||
alias rb='systemctl reboot'
|
|
||||||
alias fpl='flatpak search'
|
|
||||||
alias fpi='flatpak install'
|
|
||||||
alias fpr='flatpak run'
|
|
||||||
alias nxc='ssh henrov@nextcloud.data-pro.nu'
|
|
||||||
alias nps='xdg-open https://search.nixos.org'
|
|
||||||
alias vs= 'code'
|
|
||||||
|
|
||||||
@@ -1,122 +0,0 @@
|
|||||||
###############
|
|
||||||
# Keybindings #
|
|
||||||
###############
|
|
||||||
|
|
||||||
$mod = SUPER
|
|
||||||
|
|
||||||
# Terminal / launcher / kill / reload
|
|
||||||
bind = $mod, RETURN, exec, kitty
|
|
||||||
bind = $mod, D, exec, wofi --show drun
|
|
||||||
bind = $mod, Q, killactive,
|
|
||||||
bind = $mod SHIFT, Q, exit,
|
|
||||||
bind = $mod SHIFT, R, exec, hyprctl reload
|
|
||||||
|
|
||||||
# Default browser
|
|
||||||
bind = $mod, W, exec, xdg-open https://about:blank
|
|
||||||
# Focus movement
|
|
||||||
bind = $mod, H, movefocus, l
|
|
||||||
bind = $mod, L, movefocus, r
|
|
||||||
bind = $mod, K, movefocus, u
|
|
||||||
bind = $mod, J, movefocus, d
|
|
||||||
bind = $mod, left, movefocus, l
|
|
||||||
bind = $mod, right, movefocus, r
|
|
||||||
bind = $mod, up, movefocus, u
|
|
||||||
bind = $mod, down, movefocus, d
|
|
||||||
|
|
||||||
# Move windows
|
|
||||||
bind = $mod SHIFT, H, movewindow, l
|
|
||||||
bind = $mod SHIFT, L, movewindow, r
|
|
||||||
bind = $mod SHIFT, K, movewindow, u
|
|
||||||
bind = $mod SHIFT, J, movewindow, d
|
|
||||||
bind = $mod SHIFT, left, movewindow, l
|
|
||||||
bind = $mod SHIFT, right, movewindow, r
|
|
||||||
bind = $mod SHIFT, up, movewindow, u
|
|
||||||
bind = $mod SHIFT, down, movewindow, d
|
|
||||||
|
|
||||||
# Resize windows
|
|
||||||
bind = $mod CTRL, H, resizeactive, -30 0
|
|
||||||
bind = $mod CTRL, L, resizeactive, 30 0
|
|
||||||
bind = $mod CTRL, K, resizeactive, 0 -30
|
|
||||||
bind = $mod CTRL, J, resizeactive, 0 30
|
|
||||||
|
|
||||||
# Floating / fullscreen
|
|
||||||
bind = $mod, V, togglefloating,
|
|
||||||
bind = $mod, F, fullscreen, 0
|
|
||||||
bind = $mod SHIFT, F, fullscreen, 1
|
|
||||||
|
|
||||||
# Workspaces
|
|
||||||
bind = $mod, 1, workspace, 1
|
|
||||||
bind = $mod, 2, workspace, 2
|
|
||||||
bind = $mod, 3, workspace, 3
|
|
||||||
bind = $mod, 4, workspace, 4
|
|
||||||
bind = $mod, 5, workspace, 5
|
|
||||||
bind = $mod, 6, workspace, 6
|
|
||||||
bind = $mod, 7, workspace, 7
|
|
||||||
bind = $mod, 8, workspace, 8
|
|
||||||
bind = $mod, 9, workspace, 9
|
|
||||||
bind = $mod, 0, workspace, 10
|
|
||||||
|
|
||||||
bind = $mod SHIFT, 1, movetoworkspace, 1
|
|
||||||
bind = $mod SHIFT, 2, movetoworkspace, 2
|
|
||||||
bind = $mod SHIFT, 3, movetoworkspace, 3
|
|
||||||
bind = $mod SHIFT, 4, movetoworkspace, 4
|
|
||||||
bind = $mod SHIFT, 5, movetoworkspace, 5
|
|
||||||
bind = $mod SHIFT, 6, movetoworkspace, 6
|
|
||||||
bind = $mod SHIFT, 7, movetoworkspace, 7
|
|
||||||
bind = $mod SHIFT, 8, movetoworkspace, 8
|
|
||||||
bind = $mod SHIFT, 9, movetoworkspace, 9
|
|
||||||
bind = $mod SHIFT, 0, movetoworkspace, 10
|
|
||||||
|
|
||||||
# Cycle workspaces
|
|
||||||
bind = $mod, mouse_down, workspace, e+1
|
|
||||||
bind = $mod, mouse_up, workspace, e-1
|
|
||||||
|
|
||||||
# Mouse drag
|
|
||||||
bindm = $mod, mouse:272, movewindow
|
|
||||||
bindm = $mod, mouse:273, resizewindow
|
|
||||||
|
|
||||||
#########################
|
|
||||||
# Screenshots
|
|
||||||
#########################
|
|
||||||
bind = $mod SHIFT, s, exec, grim -g "$(slurp)" - | wl-copy
|
|
||||||
bind = , XF86Screenshot, exec, grim - | wl-copy
|
|
||||||
|
|
||||||
#########################
|
|
||||||
# Audio (pamixer)
|
|
||||||
#########################
|
|
||||||
bind = , XF86AudioRaiseVolume, exec, pamixer -i 5
|
|
||||||
bind = , XF86AudioLowerVolume, exec, pamixer -d 5
|
|
||||||
bind = , XF86AudioMute, exec, pamixer -t
|
|
||||||
bind = , XF86AudioMicMute, exec, pamixer --default-source -t
|
|
||||||
|
|
||||||
#########################
|
|
||||||
# Media (playerctl)
|
|
||||||
#########################
|
|
||||||
bind = , XF86AudioPlay, exec, playerctl play-pause
|
|
||||||
bind = , XF86AudioPause, exec, playerctl pause
|
|
||||||
bind = , XF86AudioNext, exec, playerctl next
|
|
||||||
bind = , XF86AudioPrev, exec, playerctl previous
|
|
||||||
bind = , XF86AudioStop, exec, playerctl stop
|
|
||||||
|
|
||||||
#########################
|
|
||||||
# Brightness (brightnessctl)
|
|
||||||
#########################
|
|
||||||
bind = , XF86MonBrightnessUp, exec, brightnessctl set +10%
|
|
||||||
bind = , XF86MonBrightnessDown, exec, brightnessctl set 10%-
|
|
||||||
bind = , XF86KbdBrightnessUp, exec, brightnessctl -d '*kbd_backlight*' set +10%
|
|
||||||
bind = , XF86KbdBrightnessDown, exec, brightnessctl -d '*kbd_backlight*' set 10%-
|
|
||||||
|
|
||||||
#########################
|
|
||||||
# Power / session
|
|
||||||
#########################
|
|
||||||
bind = , XF86Sleep, exec, systemctl suspend
|
|
||||||
bind = , XF86PowerOff, exec, systemctl poweroff
|
|
||||||
bind = , XF86WakeUp, exec, systemctl suspend
|
|
||||||
|
|
||||||
#########################
|
|
||||||
# Start apps
|
|
||||||
#########################
|
|
||||||
bind = $mod, E, exec, dolphin
|
|
||||||
bind = CTRLALT, B, exec, flatpak run eu.betterbird.Betterbird
|
|
||||||
bind = CTRLALT, S, exec, spotify
|
|
||||||
bind = CTRLALT, z, exec, flatpak run app.zen_browser.zen
|
|
||||||
@@ -1,11 +0,0 @@
|
|||||||
# Minimal Hyprland config for greetd
|
|
||||||
|
|
||||||
monitor = , preferred, auto, 1
|
|
||||||
|
|
||||||
misc {
|
|
||||||
disable_hyprland_logo = true
|
|
||||||
disable_splash_rendering = true
|
|
||||||
}
|
|
||||||
|
|
||||||
# Start qtgreet and point it at the correct session paths for NixOS
|
|
||||||
exec-once = sh -lc 'source /etc/greetd/qtgreet-session-paths; exec qtgreet -w "$WAYLAND_SESSIONS" -x "$X11_SESSIONS"'
|
|
||||||
@@ -1,61 +0,0 @@
|
|||||||
# =========================
|
|
||||||
# Hyprland config (generated by Nix)
|
|
||||||
# =========================
|
|
||||||
|
|
||||||
# --- Variables ---
|
|
||||||
$mod = SUPER
|
|
||||||
$term = kitty
|
|
||||||
$menu = hyprshell run
|
|
||||||
|
|
||||||
|
|
||||||
# --- Environment ---
|
|
||||||
env = XDG_CURRENT_DESKTOP,Hyprland
|
|
||||||
env = XDG_SESSION_TYPE,wayland
|
|
||||||
env = XDG_SESSION_DESKTOP,Hyprland
|
|
||||||
env = MOZ_ENABLE_WAYLAND,1
|
|
||||||
|
|
||||||
# --- Monitor (safe default) ---
|
|
||||||
monitor = , preferred, auto, 1
|
|
||||||
|
|
||||||
# --- Input ---
|
|
||||||
input {
|
|
||||||
kb_layout = us
|
|
||||||
follow_mouse = 1
|
|
||||||
touchpad {
|
|
||||||
natural_scroll = true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
# --- General ---
|
|
||||||
general {
|
|
||||||
gaps_in = 5
|
|
||||||
gaps_out = 10
|
|
||||||
border_size = 2
|
|
||||||
layout = dwindle
|
|
||||||
}
|
|
||||||
|
|
||||||
animations {
|
|
||||||
enabled = true
|
|
||||||
}
|
|
||||||
|
|
||||||
decoration {
|
|
||||||
blur {
|
|
||||||
enabled = true
|
|
||||||
size = 8
|
|
||||||
passes = 2
|
|
||||||
new_optimizations = true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
misc {
|
|
||||||
disable_hyprland_logo = false
|
|
||||||
disable_splash_rendering = false
|
|
||||||
}
|
|
||||||
|
|
||||||
# --- Keybindings live here ---
|
|
||||||
source = /etc/xdg/hypr/bindings.conf
|
|
||||||
|
|
||||||
|
|
||||||
# --- Autostart ---
|
|
||||||
exec-once = waybar
|
|
||||||
#exec-once = sleep 2 & /run/current-system/sw/bin/hyprshell run
|
|
||||||
@@ -1,71 +0,0 @@
|
|||||||
// Edit with `hyprshell config edit` <-- GUI app, resize!
|
|
||||||
(
|
|
||||||
version: 3,
|
|
||||||
windows: (
|
|
||||||
scale: 8.5,
|
|
||||||
items_per_row: 5 ,
|
|
||||||
overview: (
|
|
||||||
launcher: (
|
|
||||||
default_terminal: None,
|
|
||||||
launch_modifier: "ctrl",
|
|
||||||
width: 800,
|
|
||||||
max_items: 5,
|
|
||||||
show_when_empty: true,
|
|
||||||
plugins: (
|
|
||||||
applications: (
|
|
||||||
run_cache_weeks: 8,
|
|
||||||
show_execs: true,
|
|
||||||
show_actions_submenu: true,
|
|
||||||
),
|
|
||||||
terminal: None,
|
|
||||||
shell: None,
|
|
||||||
websearch: None,
|
|
||||||
calc: (),
|
|
||||||
path: (),
|
|
||||||
actions: (
|
|
||||||
actions: [
|
|
||||||
lock_screen,
|
|
||||||
hibernate,
|
|
||||||
logout,
|
|
||||||
reboot,
|
|
||||||
shutdown,
|
|
||||||
suspend,
|
|
||||||
custom(
|
|
||||||
names: [
|
|
||||||
"Kill",
|
|
||||||
"Stop",
|
|
||||||
],
|
|
||||||
details: "Kill or stop a process by name",
|
|
||||||
command: "pkill \"{}\" && notify-send hyprshell \"stopped {}\"",
|
|
||||||
icon: "remove",
|
|
||||||
),
|
|
||||||
custom(
|
|
||||||
names: [
|
|
||||||
"Reload Hyprshell",
|
|
||||||
],
|
|
||||||
details: "Reload Hyprshell",
|
|
||||||
command: "sleep 1; hyprshell socat \'\"Restart\"\'",
|
|
||||||
icon: "system-restart",
|
|
||||||
),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
key: "Super_L",
|
|
||||||
modifier: "super",
|
|
||||||
filter_by: [],
|
|
||||||
hide_filtered: false,
|
|
||||||
exclude_special_workspaces: "",
|
|
||||||
),
|
|
||||||
switch: (
|
|
||||||
modifier: "alt",
|
|
||||||
key: "Tab",
|
|
||||||
filter_by: [
|
|
||||||
current_monitor,
|
|
||||||
],
|
|
||||||
switch_workspaces: false,
|
|
||||||
exclude_special_workspaces: "",
|
|
||||||
),
|
|
||||||
switch_2: None,
|
|
||||||
),
|
|
||||||
)
|
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
window {
|
|
||||||
background: rgba(20, 20, 20, 0.92);
|
|
||||||
border-radius: 18px;
|
|
||||||
}
|
|
||||||
|
|
||||||
* {
|
|
||||||
background-color: unset;
|
|
||||||
}
|
|
||||||
@@ -1,80 +0,0 @@
|
|||||||
{ pkgs }:
|
|
||||||
|
|
||||||
{
|
|
||||||
# Packages to be installed in the *user* profile via Home Manager
|
|
||||||
packages = with pkgs; [
|
|
||||||
# system
|
|
||||||
waybar
|
|
||||||
wofi
|
|
||||||
dunst
|
|
||||||
xdg-utils
|
|
||||||
desktop-file-utils
|
|
||||||
playerctl
|
|
||||||
pamixer
|
|
||||||
brightnessctl
|
|
||||||
rofi
|
|
||||||
home-manager
|
|
||||||
|
|
||||||
# hyprland
|
|
||||||
hyprpaper
|
|
||||||
|
|
||||||
# utils
|
|
||||||
wget
|
|
||||||
flatpak
|
|
||||||
nextcloud-client
|
|
||||||
kdePackages.okular
|
|
||||||
kdePackages.gwenview
|
|
||||||
kdePackages.kdeconnect-kde
|
|
||||||
_1password-gui
|
|
||||||
docker
|
|
||||||
tree
|
|
||||||
ripgrep
|
|
||||||
gparted
|
|
||||||
file
|
|
||||||
htop
|
|
||||||
wev
|
|
||||||
solaar
|
|
||||||
|
|
||||||
# terminal
|
|
||||||
kitty
|
|
||||||
starship
|
|
||||||
kdePackages.konsole
|
|
||||||
kdePackages.yakuake
|
|
||||||
|
|
||||||
# office
|
|
||||||
obsidian
|
|
||||||
onlyoffice-desktopeditors
|
|
||||||
|
|
||||||
# development
|
|
||||||
git
|
|
||||||
vscode-with-extensions
|
|
||||||
kdePackages.kate
|
|
||||||
jetbrains.pycharm
|
|
||||||
python3
|
|
||||||
|
|
||||||
# communication
|
|
||||||
nextcloud-talk-desktop
|
|
||||||
signal-desktop
|
|
||||||
|
|
||||||
# multimedia
|
|
||||||
spotify
|
|
||||||
vlc
|
|
||||||
|
|
||||||
# graphic
|
|
||||||
gimp2
|
|
||||||
];
|
|
||||||
|
|
||||||
# Keeping these here as "data" (optional to use later)
|
|
||||||
flatpakRemote = {
|
|
||||||
name = "flathub";
|
|
||||||
url = "https://dl.flathub.org/repo/flathub.flatpakrepo";
|
|
||||||
};
|
|
||||||
|
|
||||||
flatpakApps = [
|
|
||||||
"app.zen_browser.zen"
|
|
||||||
"org.mozilla.firefox"
|
|
||||||
"com.github.tchx84.Flatseal"
|
|
||||||
"eu.betterbird.Betterbird"
|
|
||||||
"com.todoist.Todoist"
|
|
||||||
];
|
|
||||||
}
|
|
||||||
@@ -1,279 +0,0 @@
|
|||||||
"$schema" = 'https://starship.rs/config-schema.json'
|
|
||||||
|
|
||||||
format = """
|
|
||||||
[](red)\
|
|
||||||
$os\
|
|
||||||
$username\
|
|
||||||
[](bg:peach fg:red)\
|
|
||||||
$directory\
|
|
||||||
[](bg:yellow fg:peach)\
|
|
||||||
$git_branch\
|
|
||||||
$git_status\
|
|
||||||
[](fg:yellow bg:green)\
|
|
||||||
$c\
|
|
||||||
$rust\
|
|
||||||
$golang\
|
|
||||||
$nodejs\
|
|
||||||
$php\
|
|
||||||
$java\
|
|
||||||
$kotlin\
|
|
||||||
$haskell\
|
|
||||||
$python\
|
|
||||||
[](fg:green bg:sapphire)\
|
|
||||||
$conda\
|
|
||||||
[](fg:sapphire bg:lavender)\
|
|
||||||
$time\
|
|
||||||
[ ](fg:lavender)\
|
|
||||||
$cmd_duration\
|
|
||||||
$line_break\
|
|
||||||
$character"""
|
|
||||||
|
|
||||||
palette = 'catppuccin_mocha'
|
|
||||||
|
|
||||||
[os]
|
|
||||||
disabled = false
|
|
||||||
style = "bg:red fg:crust"
|
|
||||||
|
|
||||||
[os.symbols]
|
|
||||||
Windows = ""
|
|
||||||
Ubuntu = ""
|
|
||||||
SUSE = ""
|
|
||||||
Raspbian = ""
|
|
||||||
Mint = ""
|
|
||||||
Macos = ""
|
|
||||||
Manjaro = ""
|
|
||||||
Linux = ""
|
|
||||||
Gentoo = ""
|
|
||||||
Fedora = ""
|
|
||||||
Alpine = ""
|
|
||||||
Amazon = ""
|
|
||||||
Android = ""
|
|
||||||
AOSC = ""
|
|
||||||
Arch = ""
|
|
||||||
Artix = ""
|
|
||||||
CentOS = ""
|
|
||||||
Debian = ""
|
|
||||||
Redhat = ""
|
|
||||||
RedHatEnterprise = ""
|
|
||||||
|
|
||||||
[username]
|
|
||||||
show_always = true
|
|
||||||
style_user = "bg:red fg:crust"
|
|
||||||
style_root = "bg:red fg:crust"
|
|
||||||
format = '[ $user]($style)'
|
|
||||||
|
|
||||||
[directory]
|
|
||||||
style = "bg:peach fg:crust"
|
|
||||||
format = "[ $path ]($style)"
|
|
||||||
truncation_length = 3
|
|
||||||
truncation_symbol = "…/"
|
|
||||||
|
|
||||||
[directory.substitutions]
|
|
||||||
"Documents" = " "
|
|
||||||
"Downloads" = " "
|
|
||||||
"Music" = " "
|
|
||||||
"Pictures" = " "
|
|
||||||
"Developer" = " "
|
|
||||||
|
|
||||||
[git_branch]
|
|
||||||
symbol = ""
|
|
||||||
style = "bg:yellow"
|
|
||||||
format = '[[ $symbol $branch ](fg:crust bg:yellow)]($style)'
|
|
||||||
|
|
||||||
[git_status]
|
|
||||||
style = "bg:yellow"
|
|
||||||
format = '[[($all_status$ahead_behind )](fg:crust bg:yellow)]($style)'
|
|
||||||
|
|
||||||
[nodejs]
|
|
||||||
symbol = ""
|
|
||||||
style = "bg:green"
|
|
||||||
format = '[[ $symbol( $version) ](fg:crust bg:green)]($style)'
|
|
||||||
|
|
||||||
[c]
|
|
||||||
symbol = " "
|
|
||||||
style = "bg:green"
|
|
||||||
format = '[[ $symbol( $version) ](fg:crust bg:green)]($style)'
|
|
||||||
|
|
||||||
[rust]
|
|
||||||
symbol = ""
|
|
||||||
style = "bg:green"
|
|
||||||
format = '[[ $symbol( $version) ](fg:crust bg:green)]($style)'
|
|
||||||
|
|
||||||
[golang]
|
|
||||||
symbol = ""
|
|
||||||
style = "bg:green"
|
|
||||||
format = '[[ $symbol( $version) ](fg:crust bg:green)]($style)'
|
|
||||||
|
|
||||||
[php]
|
|
||||||
symbol = ""
|
|
||||||
style = "bg:green"
|
|
||||||
format = '[[ $symbol( $version) ](fg:crust bg:green)]($style)'
|
|
||||||
|
|
||||||
[java]
|
|
||||||
symbol = " "
|
|
||||||
style = "bg:green"
|
|
||||||
format = '[[ $symbol( $version) ](fg:crust bg:green)]($style)'
|
|
||||||
|
|
||||||
[kotlin]
|
|
||||||
symbol = ""
|
|
||||||
style = "bg:green"
|
|
||||||
format = '[[ $symbol( $version) ](fg:crust bg:green)]($style)'
|
|
||||||
|
|
||||||
[haskell]
|
|
||||||
symbol = ""
|
|
||||||
style = "bg:green"
|
|
||||||
format = '[[ $symbol( $version) ](fg:crust bg:green)]($style)'
|
|
||||||
|
|
||||||
[python]
|
|
||||||
symbol = ""
|
|
||||||
style = "bg:green"
|
|
||||||
format = '[[ $symbol( $version)(\(#$virtualenv\)) ](fg:crust bg:green)]($style)'
|
|
||||||
|
|
||||||
[docker_context]
|
|
||||||
symbol = ""
|
|
||||||
style = "bg:sapphire"
|
|
||||||
format = '[[ $symbol( $context) ](fg:crust bg:sapphire)]($style)'
|
|
||||||
|
|
||||||
[conda]
|
|
||||||
symbol = " "
|
|
||||||
style = "fg:crust bg:sapphire"
|
|
||||||
format = '[$symbol$environment ]($style)'
|
|
||||||
ignore_base = false
|
|
||||||
|
|
||||||
[time]
|
|
||||||
disabled = false
|
|
||||||
time_format = "%R"
|
|
||||||
style = "bg:lavender"
|
|
||||||
format = '[[ $time ](fg:crust bg:lavender)]($style)'
|
|
||||||
|
|
||||||
[line_break]
|
|
||||||
disabled = false
|
|
||||||
|
|
||||||
[character]
|
|
||||||
disabled = false
|
|
||||||
success_symbol = '[❯](bold fg:green)'
|
|
||||||
error_symbol = '[❯](bold fg:red)'
|
|
||||||
vimcmd_symbol = '[❮](bold fg:green)'
|
|
||||||
vimcmd_replace_one_symbol = '[❮](bold fg:lavender)'
|
|
||||||
vimcmd_replace_symbol = '[❮](bold fg:lavender)'
|
|
||||||
vimcmd_visual_symbol = '[❮](bold fg:yellow)'
|
|
||||||
|
|
||||||
[cmd_duration]
|
|
||||||
show_milliseconds = true
|
|
||||||
format = " in $duration "
|
|
||||||
style = "bg:lavender"
|
|
||||||
disabled = false
|
|
||||||
show_notifications = true
|
|
||||||
min_time_to_notify = 45000
|
|
||||||
|
|
||||||
[palettes.catppuccin_mocha]
|
|
||||||
rosewater = "#f5e0dc"
|
|
||||||
flamingo = "#f2cdcd"
|
|
||||||
pink = "#f5c2e7"
|
|
||||||
mauve = "#cba6f7"
|
|
||||||
red = "#f38ba8"
|
|
||||||
maroon = "#eba0ac"
|
|
||||||
peach = "#fab387"
|
|
||||||
yellow = "#f9e2af"
|
|
||||||
green = "#a6e3a1"
|
|
||||||
teal = "#94e2d5"
|
|
||||||
sky = "#89dceb"
|
|
||||||
sapphire = "#74c7ec"
|
|
||||||
blue = "#89b4fa"
|
|
||||||
lavender = "#b4befe"
|
|
||||||
text = "#cdd6f4"
|
|
||||||
subtext1 = "#bac2de"
|
|
||||||
subtext0 = "#a6adc8"
|
|
||||||
overlay2 = "#9399b2"
|
|
||||||
overlay1 = "#7f849c"
|
|
||||||
overlay0 = "#6c7086"
|
|
||||||
surface2 = "#585b70"
|
|
||||||
surface1 = "#45475a"
|
|
||||||
surface0 = "#313244"
|
|
||||||
base = "#1e1e2e"
|
|
||||||
mantle = "#181825"
|
|
||||||
crust = "#11111b"
|
|
||||||
|
|
||||||
[palettes.catppuccin_frappe]
|
|
||||||
rosewater = "#f2d5cf"
|
|
||||||
flamingo = "#eebebe"
|
|
||||||
pink = "#f4b8e4"
|
|
||||||
mauve = "#ca9ee6"
|
|
||||||
red = "#e78284"
|
|
||||||
maroon = "#ea999c"
|
|
||||||
peach = "#ef9f76"
|
|
||||||
yellow = "#e5c890"
|
|
||||||
green = "#a6d189"
|
|
||||||
teal = "#81c8be"
|
|
||||||
sky = "#99d1db"
|
|
||||||
sapphire = "#85c1dc"
|
|
||||||
blue = "#8caaee"
|
|
||||||
lavender = "#babbf1"
|
|
||||||
text = "#c6d0f5"
|
|
||||||
subtext1 = "#b5bfe2"
|
|
||||||
subtext0 = "#a5adce"
|
|
||||||
overlay2 = "#949cbb"
|
|
||||||
overlay1 = "#838ba7"
|
|
||||||
overlay0 = "#737994"
|
|
||||||
surface2 = "#626880"
|
|
||||||
surface1 = "#51576d"
|
|
||||||
surface0 = "#414559"
|
|
||||||
base = "#303446"
|
|
||||||
mantle = "#292c3c"
|
|
||||||
crust = "#232634"
|
|
||||||
|
|
||||||
[palettes.catppuccin_latte]
|
|
||||||
rosewater = "#dc8a78"
|
|
||||||
flamingo = "#dd7878"
|
|
||||||
pink = "#ea76cb"
|
|
||||||
mauve = "#8839ef"
|
|
||||||
red = "#d20f39"
|
|
||||||
maroon = "#e64553"
|
|
||||||
peach = "#fe640b"
|
|
||||||
yellow = "#df8e1d"
|
|
||||||
green = "#40a02b"
|
|
||||||
teal = "#179299"
|
|
||||||
sky = "#04a5e5"
|
|
||||||
sapphire = "#209fb5"
|
|
||||||
blue = "#1e66f5"
|
|
||||||
lavender = "#7287fd"
|
|
||||||
text = "#4c4f69"
|
|
||||||
subtext1 = "#5c5f77"
|
|
||||||
subtext0 = "#6c6f85"
|
|
||||||
overlay2 = "#7c7f93"
|
|
||||||
overlay1 = "#8c8fa1"
|
|
||||||
overlay0 = "#9ca0b0"
|
|
||||||
surface2 = "#acb0be"
|
|
||||||
surface1 = "#bcc0cc"
|
|
||||||
surface0 = "#ccd0da"
|
|
||||||
base = "#eff1f5"
|
|
||||||
mantle = "#e6e9ef"
|
|
||||||
crust = "#dce0e8"
|
|
||||||
|
|
||||||
[palettes.catppuccin_macchiato]
|
|
||||||
rosewater = "#f4dbd6"
|
|
||||||
flamingo = "#f0c6c6"
|
|
||||||
pink = "#f5bde6"
|
|
||||||
mauve = "#c6a0f6"
|
|
||||||
red = "#ed8796"
|
|
||||||
maroon = "#ee99a0"
|
|
||||||
peach = "#f5a97f"
|
|
||||||
yellow = "#eed49f"
|
|
||||||
green = "#a6da95"
|
|
||||||
teal = "#8bd5ca"
|
|
||||||
sky = "#91d7e3"
|
|
||||||
sapphire = "#7dc4e4"
|
|
||||||
blue = "#8aadf4"
|
|
||||||
lavender = "#b7bdf8"
|
|
||||||
text = "#cad3f5"
|
|
||||||
subtext1 = "#b8c0e0"
|
|
||||||
subtext0 = "#a5adcb"
|
|
||||||
overlay2 = "#939ab7"
|
|
||||||
overlay1 = "#8087a2"
|
|
||||||
overlay0 = "#6e738d"
|
|
||||||
surface2 = "#5b6078"
|
|
||||||
surface1 = "#494d64"
|
|
||||||
surface0 = "#363a4f"
|
|
||||||
base = "#24273a"
|
|
||||||
mantle = "#1e2030"
|
|
||||||
crust = "#181926"
|
|
||||||
@@ -1,13 +0,0 @@
|
|||||||
{
|
|
||||||
"layer": "top",
|
|
||||||
"position": "top",
|
|
||||||
"height": 30,
|
|
||||||
|
|
||||||
"modules-left": ["hyprland/workspaces"],
|
|
||||||
"modules-center": ["clock"],
|
|
||||||
"modules-right": ["network", "pulseaudio", "tray"],
|
|
||||||
|
|
||||||
"clock": {
|
|
||||||
"format": "{:%a %d %b %H:%M}"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,58 +0,0 @@
|
|||||||
{ config, lib, pkgs, ... }:
|
|
||||||
|
|
||||||
let
|
|
||||||
moduleName = "hm-deefault-apps";
|
|
||||||
in
|
|
||||||
{
|
|
||||||
# Ensure update-mime-database is available
|
|
||||||
home.packages = with pkgs; [
|
|
||||||
shared-mime-info
|
|
||||||
];
|
|
||||||
|
|
||||||
# Teach the MIME DB that *.nix files are text/x-nix
|
|
||||||
xdg.dataFile."mime/packages/nix.xml".text = ''
|
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<mime-info xmlns="http://www.freedesktop.org/standards/shared-mime-info">
|
|
||||||
<mime-type type="text/x-nix">
|
|
||||||
<comment>Nix expression</comment>
|
|
||||||
<glob pattern="*.nix"/>
|
|
||||||
</mime-type>
|
|
||||||
</mime-info>
|
|
||||||
'';
|
|
||||||
|
|
||||||
# Rebuild user MIME database after HM writes xdg.dataFile files
|
|
||||||
home.activation.updateMimeDatabase =
|
|
||||||
lib.hm.dag.entryAfter [ "writeBoundary" ] ''
|
|
||||||
${pkgs.shared-mime-info}/bin/update-mime-database ${config.xdg.dataHome}/mime
|
|
||||||
'';
|
|
||||||
|
|
||||||
xdg.mimeApps.enable = true;
|
|
||||||
|
|
||||||
xdg.mimeApps.defaultApplications = {
|
|
||||||
# Nix files
|
|
||||||
"text/x-nix" = [ "org.kde.kate.desktop" ];
|
|
||||||
"text/plain" = [ "org.kde.kate.desktop" ];
|
|
||||||
"text/x-ini" = [ "org.kde.kate.desktop" ];
|
|
||||||
"application/x-desktop" = [ "org.kde.kate.desktop" ];
|
|
||||||
|
|
||||||
# Zen Browser (Flatpak)
|
|
||||||
"x-scheme-handler/http" = [ "app.zen_browser.zen.desktop" ];
|
|
||||||
"x-scheme-handler/https" = [ "app.zen_browser.zen.desktop" ];
|
|
||||||
"text/html" = [ "app.zen_browser.zen.desktop" ];
|
|
||||||
|
|
||||||
# Email
|
|
||||||
"x-scheme-handler/mailto" = [ "eu.betterbird.Betterbird.desktop" ];
|
|
||||||
"message/rfc822" = [ "eu.betterbird.Betterbird.desktop" ];
|
|
||||||
|
|
||||||
# Calendar (common handlers)
|
|
||||||
"text/calendar" = [ "eu.betterbird.Betterbird.desktop" ];
|
|
||||||
"application/ics" = [ "eu.betterbird.Betterbird.desktop" ];
|
|
||||||
"application/calendar" = [ "eu.betterbird.Betterbird.desktop" ];
|
|
||||||
"x-scheme-handler/webcal" = [ "eu.betterbird.Betterbird.desktop" ];
|
|
||||||
"x-scheme-handler/webcals" = [ "eu.betterbird.Betterbird.desktop" ];
|
|
||||||
|
|
||||||
# File manager
|
|
||||||
"inode/directory" = [ "org.kde.dolphin.desktop" ];
|
|
||||||
};
|
|
||||||
home.file.".nixlog/loaded.${moduleName}-module-loaded".text = "loaded\n";
|
|
||||||
}
|
|
||||||
@@ -1,58 +0,0 @@
|
|||||||
{ config, pkgs, lib, ... }:
|
|
||||||
|
|
||||||
let
|
|
||||||
p = import ./conf/packages.conf { inherit pkgs; };
|
|
||||||
remote = p.flatpakRemote;
|
|
||||||
apps = p.flatpakApps;
|
|
||||||
q = lib.escapeShellArg;
|
|
||||||
appArgs = lib.concatStringsSep " " (map q apps);
|
|
||||||
moduleName = "hm-flatpak";
|
|
||||||
in
|
|
||||||
{
|
|
||||||
services.flatpak.enable = true;
|
|
||||||
|
|
||||||
# Make network-online.target meaningful on NetworkManager systems
|
|
||||||
systemd.services.NetworkManager-wait-online.enable = true;
|
|
||||||
|
|
||||||
systemd.services.flatpak-sync = {
|
|
||||||
description = "Sync Flatpak remote and apps";
|
|
||||||
wantedBy = [ "multi-user.target" ];
|
|
||||||
|
|
||||||
wants = [ "network-online.target" ];
|
|
||||||
after = [ "network-online.target" ];
|
|
||||||
|
|
||||||
# re-run when system changes (useful when app list changes)
|
|
||||||
#restartTriggers = [ config.system.build.toplevel ];
|
|
||||||
|
|
||||||
serviceConfig = {
|
|
||||||
Type = "oneshot";
|
|
||||||
TimeoutStartSec = 300;
|
|
||||||
};
|
|
||||||
|
|
||||||
script = ''
|
|
||||||
set -euo pipefail
|
|
||||||
FLATPAK=${pkgs.flatpak}/bin/flatpak
|
|
||||||
|
|
||||||
# wait for DNS (prevents your exact error)
|
|
||||||
for i in $(seq 1 30); do
|
|
||||||
if ${pkgs.getent}/bin/getent hosts dl.flathub.org >/dev/null 2>&1; then
|
|
||||||
break
|
|
||||||
fi
|
|
||||||
sleep 1
|
|
||||||
done
|
|
||||||
|
|
||||||
"$FLATPAK" remote-add --system --if-not-exists ${q remote.name} ${q remote.url} || true
|
|
||||||
|
|
||||||
installed="$("$FLATPAK" list --system --app --columns=application 2>/dev/null || true)"
|
|
||||||
for app in ${appArgs}; do
|
|
||||||
if echo "$installed" | grep -qx "$app"; then
|
|
||||||
echo "flatpak: already installed: $app"
|
|
||||||
else
|
|
||||||
echo "flatpak: installing: $app"
|
|
||||||
"$FLATPAK" install --system -y ${q remote.name} "$app"
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
home.file.".nixlog/loaded.${moduleName}-module-loaded".text = "loaded\n";
|
|
||||||
}
|
|
||||||
@@ -1,50 +0,0 @@
|
|||||||
{ config, pkgs, ... }:
|
|
||||||
|
|
||||||
let
|
|
||||||
waylandSessions = "${config.services.displayManager.sessionData.desktops}/share/wayland-sessions";
|
|
||||||
x11Sessions = "${config.services.displayManager.sessionData.desktops}/share/xsessions";
|
|
||||||
moduleName = "hm-greeter";
|
|
||||||
in
|
|
||||||
{
|
|
||||||
|
|
||||||
users.users.greeter = {
|
|
||||||
isSystemUser = true;
|
|
||||||
group = "greeter";
|
|
||||||
};
|
|
||||||
users.groups.greeter = {};
|
|
||||||
|
|
||||||
|
|
||||||
services.greetd = {
|
|
||||||
enable = true;
|
|
||||||
|
|
||||||
settings = {
|
|
||||||
terminal.vt = 1;
|
|
||||||
|
|
||||||
default_session = {
|
|
||||||
# Run Hyprland as the greeter compositor
|
|
||||||
command = "${pkgs.dbus}/bin/dbus-run-session ${pkgs.hyprland}/bin/start-hyprland -- --config /etc/greetd/greeter.conf";
|
|
||||||
user = "greeter";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
# Install the greeter Hyprland config file
|
|
||||||
environment.etc."greetd/greeter.conf".source = ./conf/greeter.conf;
|
|
||||||
|
|
||||||
# Give qtgreet access to session files on NixOS
|
|
||||||
environment.etc."greetd/qtgreet-session-paths".text = ''
|
|
||||||
WAYLAND_SESSIONS=${waylandSessions}
|
|
||||||
X11_SESSIONS=${x11Sessions}
|
|
||||||
'';
|
|
||||||
|
|
||||||
# Needed for Wayland logins in many setups
|
|
||||||
services.seatd.enable = true;
|
|
||||||
|
|
||||||
environment.systemPackages = with pkgs; [
|
|
||||||
qtgreet
|
|
||||||
qt6Packages.qt6ct
|
|
||||||
kdePackages.breeze
|
|
||||||
kdePackages.breeze-icons
|
|
||||||
];
|
|
||||||
home.file.".nixlog/loaded.${moduleName}-module-loaded".text = "loaded\n";
|
|
||||||
}
|
|
||||||
@@ -1,31 +0,0 @@
|
|||||||
{ pkgs, ... }:
|
|
||||||
|
|
||||||
let
|
|
||||||
moduleName = "hm-hyprland";
|
|
||||||
in
|
|
||||||
{
|
|
||||||
imports = [
|
|
||||||
./bindings.nix
|
|
||||||
];
|
|
||||||
|
|
||||||
# Home Manager Hyprland configuration (user-level)
|
|
||||||
# This installs Hyprland in the user environment and can manage config under ~/.config/hypr/
|
|
||||||
wayland.windowManager.hyprland = {
|
|
||||||
enable = true;
|
|
||||||
# You can optionally set package = pkgs.hyprland; if you want a specific one.
|
|
||||||
};
|
|
||||||
|
|
||||||
# Put your hyprland.conf in the standard Hyprland location:
|
|
||||||
xdg.enable = true;
|
|
||||||
xdg.configFile."hypr/hyprland.conf".source = ./conf/hyprland.conf;
|
|
||||||
|
|
||||||
# Session variables that *belong in Home Manager* (user session scope)
|
|
||||||
home.sessionVariables = {
|
|
||||||
XDG_CURRENT_DESKTOP = "Hyprland";
|
|
||||||
XDG_SESSION_DESKTOP = "Hyprland";
|
|
||||||
XDG_SESSION_TYPE = "wayland";
|
|
||||||
};
|
|
||||||
|
|
||||||
# Marker file
|
|
||||||
home.file.".nixlog/loaded.${moduleName}-module-loaded".text = "loaded\n";
|
|
||||||
}
|
|
||||||
@@ -1,37 +0,0 @@
|
|||||||
{ pkgs, ... }:
|
|
||||||
|
|
||||||
let
|
|
||||||
moduleName = "hm-hyprshell";
|
|
||||||
in
|
|
||||||
{
|
|
||||||
# Make sure XDG base dirs are used (so xdg.configFile writes into ~/.config)
|
|
||||||
xdg.enable = true;
|
|
||||||
|
|
||||||
# Hyprshell config files
|
|
||||||
xdg.configFile."hyprshell/config.ron".source = ./conf/hyprshell/config.ron;
|
|
||||||
xdg.configFile."hyprshell/styles.css".source = ./conf/hyprshell/styles.css;
|
|
||||||
|
|
||||||
# Install hyprshell
|
|
||||||
home.packages = [ pkgs.hyprshell ];
|
|
||||||
|
|
||||||
# Run hyprshell as a user service when your graphical session starts
|
|
||||||
systemd.user.services.hyprshell = {
|
|
||||||
Unit = {
|
|
||||||
Description = "Hyprshell";
|
|
||||||
PartOf = [ "graphical-session.target" ];
|
|
||||||
After = [ "graphical-session.target" ];
|
|
||||||
};
|
|
||||||
|
|
||||||
Service = {
|
|
||||||
ExecStart = "${pkgs.hyprshell}/bin/hyprshell run";
|
|
||||||
Restart = "on-failure";
|
|
||||||
RestartSec = 1;
|
|
||||||
};
|
|
||||||
|
|
||||||
Install = {
|
|
||||||
WantedBy = [ "graphical-session.target" ];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
home.file.".nixlog/loaded.${moduleName}-module-loaded".text = "loaded\n";
|
|
||||||
}
|
|
||||||
@@ -1,21 +0,0 @@
|
|||||||
{ pkgs, ... }:
|
|
||||||
|
|
||||||
let
|
|
||||||
cfg = import ../../conf/packages.conf { inherit pkgs; };
|
|
||||||
moduleName = "hm-packages";
|
|
||||||
in
|
|
||||||
{
|
|
||||||
# Unfree should be set at NixOS level
|
|
||||||
nixpkgs.config.allowUnfree = true;
|
|
||||||
|
|
||||||
# Install packages via Home Manager (integrated into NixOS)
|
|
||||||
home-manager.users.henrov = {
|
|
||||||
home.packages = cfg.packages;
|
|
||||||
};
|
|
||||||
|
|
||||||
# Optional: keep these available in the NixOS config namespace if you want
|
|
||||||
# to use them with nix-flatpak later.
|
|
||||||
# (No effect unless you wire them to a flatpak module.)
|
|
||||||
_module.args.packagesConf = cfg;
|
|
||||||
home.file.".nixlog/loaded.${moduleName}-module-loaded".text = "loaded\n";
|
|
||||||
}
|
|
||||||
@@ -1,62 +0,0 @@
|
|||||||
{ config, pkgs, ... }:
|
|
||||||
|
|
||||||
let
|
|
||||||
moduleName = "hm-terminal";
|
|
||||||
in
|
|
||||||
{
|
|
||||||
# -----BASH --------------
|
|
||||||
programs.bash = {
|
|
||||||
enable = true;
|
|
||||||
|
|
||||||
# Load aliases from ~/.config/zsh/aliases.conf
|
|
||||||
bashrcExtra = ''
|
|
||||||
if [ -f "$HOME/.config/zsh/aliases.conf" ]; then
|
|
||||||
source "$HOME/.config/zsh/aliases.conf"
|
|
||||||
fi
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
|
|
||||||
# ------ KITTY -----
|
|
||||||
programs.kitty = {
|
|
||||||
enable = true;
|
|
||||||
settings = {
|
|
||||||
background_opacity = 0.60;
|
|
||||||
dynamic_background_opacity = true;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
# -------ZSH------------
|
|
||||||
programs.zsh = {
|
|
||||||
enable = true;
|
|
||||||
dotDir = ".config/zsh";
|
|
||||||
enableCompletion = true;
|
|
||||||
autosuggestion.enable = true;
|
|
||||||
syntaxHighlighting.enable = true;
|
|
||||||
initContent= ''
|
|
||||||
if [ -f "$HOME/.config/zsh/aliases.conf" ]; then
|
|
||||||
source "$HOME/.config/zsh/aliases.conf"
|
|
||||||
fi
|
|
||||||
'';
|
|
||||||
|
|
||||||
oh-my-zsh = {
|
|
||||||
enable = true;
|
|
||||||
theme = "";
|
|
||||||
plugins = [ "git" "sudo" "docker" ];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
# Put the aliases file into ~/.config/zsh/aliases.conf
|
|
||||||
xdg.configFile."zsh/aliases.conf".source = ./conf/aliases.conf;
|
|
||||||
|
|
||||||
# -----STARSHIP--------------
|
|
||||||
programs.starship = {
|
|
||||||
enable = true;
|
|
||||||
enableBashIntegration = true;
|
|
||||||
enableZshIntegration = true;
|
|
||||||
};
|
|
||||||
|
|
||||||
xdg.configFile."starship.toml".text =
|
|
||||||
builtins.readFile ./conf/starship.toml;
|
|
||||||
|
|
||||||
home.file.".nixlog/loaded.${moduleName}-module-loaded".text = "loaded\n";
|
|
||||||
}
|
|
||||||
@@ -1,22 +0,0 @@
|
|||||||
{ config, pkgs, ... }:
|
|
||||||
|
|
||||||
let
|
|
||||||
moduleName = "hm-waybar";
|
|
||||||
in
|
|
||||||
{
|
|
||||||
# Installs + enables Waybar
|
|
||||||
programs.waybar = {
|
|
||||||
enable = true;
|
|
||||||
|
|
||||||
# Explicit install (optional, but you asked for it)
|
|
||||||
package = pkgs.waybar;
|
|
||||||
};
|
|
||||||
|
|
||||||
# Your config file is named waybar.conf in your repo,
|
|
||||||
# but Waybar expects it as ~/.config/waybar/config
|
|
||||||
xdg.configFile."waybar/config".source = .conf/waybar/waybar.conf;
|
|
||||||
|
|
||||||
# CSS styling
|
|
||||||
xdg.configFile."waybar/style.css".source = ./waybar/style.css;
|
|
||||||
home.file.".nixlog/loaded.${moduleName}-module-loaded".text = "loaded\n";
|
|
||||||
}
|
|
||||||
@@ -1,11 +0,0 @@
|
|||||||
{ config, pkgs, lib, ... }:
|
|
||||||
|
|
||||||
let
|
|
||||||
moduleName = "nixos-bluetooth";
|
|
||||||
in
|
|
||||||
{
|
|
||||||
hardware.bluetooth.enable = true;
|
|
||||||
hardware.bluetooth.powerOnBoot = true;
|
|
||||||
services.blueman.enable = true;
|
|
||||||
environment.etc."nixlog/loaded.${moduleName}".text = "loaded\n";
|
|
||||||
}
|
|
||||||
@@ -1,19 +0,0 @@
|
|||||||
{ config, lib, pkgs, ... }:
|
|
||||||
|
|
||||||
let
|
|
||||||
moduleName = "nixos-services";
|
|
||||||
in
|
|
||||||
{
|
|
||||||
programs.hyprland.enable = true;
|
|
||||||
services.seatd.enable = true;
|
|
||||||
services.keyd.enable = true;
|
|
||||||
systemd.defaultUnit = "graphical.target";
|
|
||||||
services.displayManager.defaultSession = "hyprland";
|
|
||||||
services.dbus.enable = true;
|
|
||||||
programs.dconf.enable = true;
|
|
||||||
security.polkit.enable = true;
|
|
||||||
nix.settings.experimental-features = [ "nix-command" "flakes" ];
|
|
||||||
programs.zsh.enable = true;
|
|
||||||
environment.variables.EDITOR = "nano";
|
|
||||||
environment.etc."nixlog/loaded.${moduleName}".text = "loaded\n";
|
|
||||||
}
|
|
||||||
@@ -1,17 +0,0 @@
|
|||||||
{ config, pkgs, lib, ... }:
|
|
||||||
|
|
||||||
let
|
|
||||||
moduleName = "nixos-housekeeping";
|
|
||||||
in
|
|
||||||
{
|
|
||||||
|
|
||||||
nix.gc = {
|
|
||||||
automatic = true;
|
|
||||||
dates = "weekly";
|
|
||||||
options = "--delete-older-than 7d";
|
|
||||||
};
|
|
||||||
nix.settings.auto-optimise-store = true;
|
|
||||||
|
|
||||||
|
|
||||||
environment.etc."nixlog/loaded.${moduleName}".text = "loaded\n";
|
|
||||||
}
|
|
||||||
@@ -1,10 +0,0 @@
|
|||||||
{ config, pkgs, lib, ... }:
|
|
||||||
|
|
||||||
let
|
|
||||||
moduleName = "nixos-locale";
|
|
||||||
in
|
|
||||||
{
|
|
||||||
time.timeZone = "Europe/Amsterdam";
|
|
||||||
i18n.defaultLocale = "en_US.UTF-8";
|
|
||||||
environment.etc."nixlog/loaded.${moduleName}".text = "loaded\n";
|
|
||||||
}
|
|
||||||
@@ -1,29 +0,0 @@
|
|||||||
{ config, lib, pkgs, ... }:
|
|
||||||
let
|
|
||||||
moduleName = "nixos-networking";
|
|
||||||
in
|
|
||||||
{
|
|
||||||
networking.nftables.enable = true;
|
|
||||||
|
|
||||||
networking.firewall = {
|
|
||||||
enable = true;
|
|
||||||
|
|
||||||
# Default: no inbound open ports
|
|
||||||
allowedTCPPorts = [ ];
|
|
||||||
allowedUDPPorts = [ ];
|
|
||||||
|
|
||||||
# Home-only exceptions (nftables syntax)
|
|
||||||
extraInputRules = ''
|
|
||||||
# KDE Connect (TCP/UDP 1714-1764) from home LAN
|
|
||||||
ip saddr 192.168.2.0/24 tcp dport 1714-1764 accept
|
|
||||||
ip saddr 192.168.2.0/24 udp dport 1714-1764 accept
|
|
||||||
|
|
||||||
# mDNS / Avahi for printer discovery (UDP 5353) from home LAN
|
|
||||||
ip saddr 192.168.2.0/24 udp dport 5353 accept
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
|
|
||||||
networking.networkmanager.enable = true;
|
|
||||||
services.openssh.enable = true;
|
|
||||||
environment.etc."nixlog/loaded.${moduleName}".text = "loaded\n";
|
|
||||||
}
|
|
||||||
@@ -1,35 +0,0 @@
|
|||||||
{ config, lib, pkgs, ... }:
|
|
||||||
|
|
||||||
let
|
|
||||||
moduleName = "nixos-printers";
|
|
||||||
in
|
|
||||||
{
|
|
||||||
# ---- Printing (CUPS) ----
|
|
||||||
services.printing = {
|
|
||||||
enable = true;
|
|
||||||
# Good general compatibility. Many modern printers work driverless (IPP Everywhere),
|
|
||||||
# but these help with older models and various formats.
|
|
||||||
drivers = with pkgs; [
|
|
||||||
cups-filters
|
|
||||||
gutenprint
|
|
||||||
];
|
|
||||||
};
|
|
||||||
|
|
||||||
# ---- Network printer discovery (mDNS / DNS-SD) ----
|
|
||||||
services.avahi = {
|
|
||||||
enable = true;
|
|
||||||
# Resolve .local names + discover services on IPv4
|
|
||||||
nssmdns4 = true;
|
|
||||||
# You're controlling firewall rules in firewall.nix
|
|
||||||
openFirewall = false;
|
|
||||||
};
|
|
||||||
|
|
||||||
# ---- Optional GUI tool to add/manage printers ----
|
|
||||||
environment.systemPackages = with pkgs; [
|
|
||||||
system-config-printer
|
|
||||||
];
|
|
||||||
|
|
||||||
# allow admin actions in printer GUI (usually already present on desktop systems)
|
|
||||||
security.polkit.enable = true;
|
|
||||||
environment.etc."nixlog/loaded.${moduleName}".text = "loaded\n";
|
|
||||||
}
|
|
||||||
@@ -1,17 +0,0 @@
|
|||||||
{ config, pkgs, lib, ... }:
|
|
||||||
|
|
||||||
let
|
|
||||||
moduleName = "nixos-sound";
|
|
||||||
in
|
|
||||||
{
|
|
||||||
services.pipewire = {
|
|
||||||
enable = true;
|
|
||||||
pulse.enable = true;
|
|
||||||
alsa.enable = true;
|
|
||||||
alsa.support32Bit = true;
|
|
||||||
};
|
|
||||||
|
|
||||||
security.rtkit.enable = true;
|
|
||||||
|
|
||||||
environment.etc."nixlog/loaded.${moduleName}".text = "loaded\n";
|
|
||||||
}
|
|
||||||
@@ -1,12 +0,0 @@
|
|||||||
{ config, pkgs, lib, ... }:
|
|
||||||
|
|
||||||
let
|
|
||||||
moduleName = "nixos-usb";
|
|
||||||
in
|
|
||||||
{
|
|
||||||
# Automount USB / removable media integration
|
|
||||||
services.udisks2.enable = true;
|
|
||||||
services.gvfs.enable = true;
|
|
||||||
|
|
||||||
environment.etc."nixlog/loaded.${moduleName}".text = "loaded\n";
|
|
||||||
}
|
|
||||||
@@ -1,30 +0,0 @@
|
|||||||
{ config, pkgs, lib, ... }:
|
|
||||||
|
|
||||||
let
|
|
||||||
username = "henrov";
|
|
||||||
moduleName = "nixos-users";
|
|
||||||
in
|
|
||||||
{
|
|
||||||
# Optional but common: declare defaults for user shells
|
|
||||||
users.defaultUserShell = pkgs.zsh;
|
|
||||||
|
|
||||||
users.users.${username} = {
|
|
||||||
isNormalUser = true;
|
|
||||||
|
|
||||||
# Add your user to groups needed for admin + network + typical desktop input/video access
|
|
||||||
extraGroups = [
|
|
||||||
"wheel"
|
|
||||||
"networkmanager"
|
|
||||||
"video"
|
|
||||||
"input"
|
|
||||||
"audio"
|
|
||||||
];
|
|
||||||
|
|
||||||
# If you want zsh explicitly per-user (instead of defaultUserShell):
|
|
||||||
# shell = pkgs.zsh;
|
|
||||||
};
|
|
||||||
|
|
||||||
# If you want a simple "proof this module was applied" marker at the *system* level:
|
|
||||||
# (This creates /etc/nixos-users.loaded)
|
|
||||||
environment.etc."nixos-users.loaded".text = "loaded\n";
|
|
||||||
}
|
|
||||||
@@ -1,26 +0,0 @@
|
|||||||
{ config, pkgs, lib, ... }:
|
|
||||||
|
|
||||||
let
|
|
||||||
moduleName = "nixos-xdg";
|
|
||||||
in
|
|
||||||
{
|
|
||||||
# NixOS XDG integration (system-wide)
|
|
||||||
xdg = {
|
|
||||||
menus.enable = true;
|
|
||||||
mime.enable = true;
|
|
||||||
};
|
|
||||||
|
|
||||||
xdg.portal = {
|
|
||||||
enable = true;
|
|
||||||
xdgOpenUsePortal = true;
|
|
||||||
extraPortals = with pkgs; [
|
|
||||||
# xdg-desktop-portal-hyprland
|
|
||||||
xdg-desktop-portal-gtk
|
|
||||||
];
|
|
||||||
};
|
|
||||||
|
|
||||||
environment.etc."xdg/menus/applications.menu".source =
|
|
||||||
"${pkgs.kdePackages.plasma-workspace}/etc/xdg/menus/plasma-applications.menu";
|
|
||||||
# NixOS-safe "module executed" marker (creates /etc/nixlog/loaded.nixos-xdg)
|
|
||||||
environment.etc."nixlog/loaded.${moduleName}".text = "loaded\n";
|
|
||||||
}
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
use flake
|
|
||||||
|
|
||||||
watch_file .envrc.private
|
|
||||||
if [[ -f .envrc.private ]]; then
|
|
||||||
source_env .envrc.private
|
|
||||||
fi
|
|
||||||
|
Before Width: | Height: | Size: 11 KiB |
@@ -1,187 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
|
||||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
|
||||||
|
|
||||||
<svg
|
|
||||||
width="535"
|
|
||||||
height="535"
|
|
||||||
viewBox="0 0 501.56251 501.56249"
|
|
||||||
id="svg2"
|
|
||||||
version="1.1"
|
|
||||||
inkscape:version="1.3.2 (091e20ef0f, 2023-11-25)"
|
|
||||||
sodipodi:docname="nix-snowflake-colours.svg"
|
|
||||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
|
||||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
|
||||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
|
||||||
xmlns:svg="http://www.w3.org/2000/svg"
|
|
||||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
|
||||||
xmlns:cc="http://creativecommons.org/ns#"
|
|
||||||
xmlns:dc="http://purl.org/dc/elements/1.1/">
|
|
||||||
<defs
|
|
||||||
id="defs4">
|
|
||||||
<linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
id="linearGradient5562">
|
|
||||||
<stop
|
|
||||||
style="stop-color:#699ad7;stop-opacity:1"
|
|
||||||
offset="0"
|
|
||||||
id="stop5564" />
|
|
||||||
<stop
|
|
||||||
id="stop5566"
|
|
||||||
offset="0.24345198"
|
|
||||||
style="stop-color:#7eb1dd;stop-opacity:1" />
|
|
||||||
<stop
|
|
||||||
style="stop-color:#7ebae4;stop-opacity:1"
|
|
||||||
offset="1"
|
|
||||||
id="stop5568" />
|
|
||||||
</linearGradient>
|
|
||||||
<linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
id="linearGradient5053">
|
|
||||||
<stop
|
|
||||||
style="stop-color:#415e9a;stop-opacity:1"
|
|
||||||
offset="0"
|
|
||||||
id="stop5055" />
|
|
||||||
<stop
|
|
||||||
id="stop5057"
|
|
||||||
offset="0.23168644"
|
|
||||||
style="stop-color:#4a6baf;stop-opacity:1" />
|
|
||||||
<stop
|
|
||||||
style="stop-color:#5277c3;stop-opacity:1"
|
|
||||||
offset="1"
|
|
||||||
id="stop5059" />
|
|
||||||
</linearGradient>
|
|
||||||
<linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient5562"
|
|
||||||
id="linearGradient4328"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
gradientTransform="translate(70.650339,-1055.1511)"
|
|
||||||
x1="200.59668"
|
|
||||||
y1="351.41116"
|
|
||||||
x2="290.08701"
|
|
||||||
y2="506.18814" />
|
|
||||||
<linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient5053"
|
|
||||||
id="linearGradient4330"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
gradientTransform="translate(864.69589,-1491.3405)"
|
|
||||||
x1="-584.19934"
|
|
||||||
y1="782.33563"
|
|
||||||
x2="-496.29703"
|
|
||||||
y2="937.71399" />
|
|
||||||
</defs>
|
|
||||||
<sodipodi:namedview
|
|
||||||
id="base"
|
|
||||||
pagecolor="#ffffff"
|
|
||||||
bordercolor="#666666"
|
|
||||||
borderopacity="1.0"
|
|
||||||
inkscape:pageopacity="0.0"
|
|
||||||
inkscape:pageshadow="2"
|
|
||||||
inkscape:zoom="0.70904368"
|
|
||||||
inkscape:cx="99.429699"
|
|
||||||
inkscape:cy="195.33352"
|
|
||||||
inkscape:document-units="px"
|
|
||||||
inkscape:current-layer="layer3"
|
|
||||||
showgrid="false"
|
|
||||||
inkscape:window-width="1920"
|
|
||||||
inkscape:window-height="1050"
|
|
||||||
inkscape:window-x="1920"
|
|
||||||
inkscape:window-y="30"
|
|
||||||
inkscape:window-maximized="1"
|
|
||||||
inkscape:snap-global="true"
|
|
||||||
fit-margin-top="0"
|
|
||||||
fit-margin-left="0"
|
|
||||||
fit-margin-right="0"
|
|
||||||
fit-margin-bottom="0"
|
|
||||||
inkscape:showpageshadow="2"
|
|
||||||
inkscape:pagecheckerboard="0"
|
|
||||||
inkscape:deskcolor="#d1d1d1" />
|
|
||||||
<metadata
|
|
||||||
id="metadata7">
|
|
||||||
<rdf:RDF>
|
|
||||||
<cc:Work
|
|
||||||
rdf:about="">
|
|
||||||
<dc:format>image/svg+xml</dc:format>
|
|
||||||
<dc:type
|
|
||||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
|
||||||
</cc:Work>
|
|
||||||
</rdf:RDF>
|
|
||||||
</metadata>
|
|
||||||
<g
|
|
||||||
inkscape:groupmode="layer"
|
|
||||||
id="layer3"
|
|
||||||
inkscape:label="gradient-logo"
|
|
||||||
style="display:inline;opacity:1"
|
|
||||||
transform="translate(-156.41121,933.30685)">
|
|
||||||
<g
|
|
||||||
id="g2"
|
|
||||||
transform="matrix(0.99994059,0,0,0.99994059,-0.06321798,33.188377)"
|
|
||||||
style="stroke-width:1.00006">
|
|
||||||
<path
|
|
||||||
sodipodi:nodetypes="cccccccccc"
|
|
||||||
inkscape:connector-curvature="0"
|
|
||||||
id="path3336-6"
|
|
||||||
d="m 309.54892,-710.38827 122.19683,211.67512 -56.15706,0.5268 -32.6236,-56.8692 -32.85645,56.5653 -27.90237,-0.011 -14.29086,-24.6896 46.81047,-80.4901 -33.22946,-57.8257 z"
|
|
||||||
style="opacity:1;fill:url(#linearGradient4328);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3.00018;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
|
||||||
<use
|
|
||||||
height="100%"
|
|
||||||
width="100%"
|
|
||||||
transform="rotate(60,407.11155,-715.78724)"
|
|
||||||
id="use3439-6"
|
|
||||||
inkscape:transform-center-y="151.59082"
|
|
||||||
inkscape:transform-center-x="124.43045"
|
|
||||||
xlink:href="#path3336-6"
|
|
||||||
y="0"
|
|
||||||
x="0"
|
|
||||||
style="stroke-width:1.00006" />
|
|
||||||
<use
|
|
||||||
height="100%"
|
|
||||||
width="100%"
|
|
||||||
transform="rotate(-60,407.31177,-715.70016)"
|
|
||||||
id="use3445-0"
|
|
||||||
inkscape:transform-center-y="75.573958"
|
|
||||||
inkscape:transform-center-x="-168.20651"
|
|
||||||
xlink:href="#path3336-6"
|
|
||||||
y="0"
|
|
||||||
x="0"
|
|
||||||
style="stroke-width:1.00006" />
|
|
||||||
<use
|
|
||||||
height="100%"
|
|
||||||
width="100%"
|
|
||||||
transform="rotate(180,407.41868,-715.7565)"
|
|
||||||
id="use3449-5"
|
|
||||||
inkscape:transform-center-y="-139.94592"
|
|
||||||
inkscape:transform-center-x="59.669705"
|
|
||||||
xlink:href="#path3336-6"
|
|
||||||
y="0"
|
|
||||||
x="0"
|
|
||||||
style="stroke-width:1.00006" />
|
|
||||||
<path
|
|
||||||
style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:url(#linearGradient4330);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3.00018;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
|
|
||||||
d="m 309.54892,-710.38827 122.19683,211.67512 -56.15706,0.5268 -32.6236,-56.8692 -32.85645,56.5653 -27.90237,-0.011 -14.29086,-24.6896 46.81047,-80.4901 -33.22946,-57.8256 z"
|
|
||||||
id="path4260-0"
|
|
||||||
inkscape:connector-curvature="0"
|
|
||||||
sodipodi:nodetypes="cccccccccc" />
|
|
||||||
<use
|
|
||||||
height="100%"
|
|
||||||
width="100%"
|
|
||||||
transform="rotate(120,407.33916,-716.08356)"
|
|
||||||
id="use4354-5"
|
|
||||||
xlink:href="#path4260-0"
|
|
||||||
y="0"
|
|
||||||
x="0"
|
|
||||||
style="display:inline;stroke-width:1.00006" />
|
|
||||||
<use
|
|
||||||
height="100%"
|
|
||||||
width="100%"
|
|
||||||
transform="rotate(-120,407.28823,-715.86995)"
|
|
||||||
id="use4362-2"
|
|
||||||
xlink:href="#path4260-0"
|
|
||||||
y="0"
|
|
||||||
x="0"
|
|
||||||
style="display:inline;stroke-width:1.00006" />
|
|
||||||
</g>
|
|
||||||
</g>
|
|
||||||
</svg>
|
|
||||||
|
Before Width: | Height: | Size: 6.4 KiB |
|
Before Width: | Height: | Size: 188 B |