Compare commits

...

10 Commits

20 changed files with 692 additions and 55 deletions

4
README.md Normal file
View File

@@ -0,0 +1,4 @@
# nixos-configs
## Misc references used
* https://github.com/XNM1/linux-nixos-hyprland-config-dotfiles/tree/main

View File

@@ -40,27 +40,5 @@
inputs.home-manager.nixosModules.default inputs.home-manager.nixosModules.default
]; ];
}; };
homeConfigurations = {
"caperren@cap-slim7" = home-manager.lib.homeManagerConfiguration {
pkgs = nixpkgs.legacyPackages.x86_64-linux;
extraModules = [
./home/caperren/common.nix
./home/caperren/laptop.nix
];
username = "caperren";
homeDirectory = "/home/caperren";
};
"caperren@cap-nr200p" = home-manager.lib.homeManagerConfiguration {
pkgs = nixpkgs.legacyPackages.x86_64-linux;
extraModules = [
./home/caperren/common.nix
./home/caperren/desktop1.nix
];
username = "caperren";
homeDirectory = "/home/caperren";
};
};
}; };
} }

View File

@@ -22,6 +22,7 @@
../../modules/system/desktop.nix ../../modules/system/desktop.nix
../../modules/system/fonts.nix ../../modules/system/fonts.nix
../../modules/system/gpu-nvidia.nix ../../modules/system/gpu-nvidia.nix
../../modules/system/home-manager-settings.nix
../../modules/system/hyprland.nix ../../modules/system/hyprland.nix
../../modules/system/internationalization.nix ../../modules/system/internationalization.nix
../../modules/system/networking.nix ../../modules/system/networking.nix

View File

@@ -17,6 +17,7 @@
../../modules/system/displaylink.nix ../../modules/system/displaylink.nix
../../modules/system/fonts.nix ../../modules/system/fonts.nix
../../modules/system/gpu-amd.nix ../../modules/system/gpu-amd.nix
../../modules/system/home-manager-settings.nix
../../modules/system/hyprland.nix ../../modules/system/hyprland.nix
../../modules/system/internationalization.nix ../../modules/system/internationalization.nix
../../modules/system/laptop.nix ../../modules/system/laptop.nix

View File

@@ -0,0 +1,39 @@
{ pkgs, config, ... }:
{
services.ollama = {
enable = true;
loadModels = [
"llama3.2:3b"
"phi4-reasoning:14b"
"dolphin3:8b"
"smallthinker:3b"
"gemma3:4b"
"gemma3:12b"
"gemma3:27b"
"deepcoder:14b"
"qwen3:14b"
"nomic-embed-text"
];
acceleration = "cuda";
};
services.open-webui = {
enable = true;
port = 8888;
host = "127.0.0.1";
};
environment.systemPackages = with pkgs; [
oterm
alpaca
aichat
fabric-ai
aider-chat
# tgpt
# smartcat
# nextjs-ollama-llm-ui
# open-webui
];
}

View File

@@ -20,38 +20,40 @@
services.hardware.openrgb.enable = true; services.hardware.openrgb.enable = true;
environment.systemPackages = with pkgs; [ environment.systemPackages = with pkgs; [
kitty btop
lf desktop-file-utils
dnsutils
ffmpeg-full
git git
gparted
htop htop
iftop iftop
iotop
util-linux
usbutils
dnsutils
unzip
killall
wget
jq
speedcrunch
gparted
ffmpeg-full
xfce.mousepad
imagemagick imagemagick
nvtopPackages.full iotop
jq
killall
kitty
lf
ncdu ncdu
s-tui networkmanager
networkmanagerapplet
nmap nmap
nvtopPackages.full
openrgb-with-all-plugins
pciutils pciutils
desktop-file-utils rofi-bluetooth
rpi-imager rpi-imager
rpiboot rpiboot
streamdeck-ui s-tui
scrcpy scrcpy
openrgb-with-all-plugins speedcrunch
networkmanagerapplet streamdeck-ui
rofi-bluetooth stress
networkmanager unzip
usbutils
util-linux
wget
xfce.mousepad
]; ];
} }

View File

@@ -0,0 +1,5 @@
{ config, pkgs, ... }:
{
home-manager.useGlobalPkgs = true;
home-manager.backupFileExtension = "bkp";
}

View File

@@ -22,6 +22,9 @@
xdg.portal.enable = true; xdg.portal.enable = true;
xdg.portal.extraPortals = [ pkgs.xdg-desktop-portal-gtk ]; xdg.portal.extraPortals = [ pkgs.xdg-desktop-portal-gtk ];
programs.hyprlock.enable = true;
services.hypridle.enable = true;
environment.systemPackages = with pkgs; [ environment.systemPackages = with pkgs; [
waybar waybar
dunst dunst
@@ -39,8 +42,6 @@
swayimg swayimg
hyprpicker hyprpicker
kanshi kanshi
hyprlock
swayidle
mako mako
(pkgs.waybar.overrideAttrs (oldAttrs: { (pkgs.waybar.overrideAttrs (oldAttrs: {

View File

@@ -12,11 +12,23 @@
# Generally want a larger download buffer # Generally want a larger download buffer
nix.settings.download-buffer-size = 524288000; nix.settings.download-buffer-size = 524288000;
programs.bash.shellAliases = { nix.settings.auto-optimise-store = true;
nixrebuild = "pushd /etc/nixos && { trap 'popd' EXIT; sudo nixos-rebuild switch --flake .#$(hostname); }"; nix.optimise.automatic = true;
nixupdate = "cd /etc/nixos && sudo nix flake update && sudo nixos-rebuild switch --flake .#$(hostname)"; nix.gc = {
nixedit = "sudo nano /etc/nixos/hosts/$(hostname)/configuration.nix"; automatic = true;
dates = "weekly";
options = "--delete-older-than 14d";
};
nixlimitfive = "sudo nix-env --list-generations --profile /nix/var/nix/profiles/system | head -n -5 | cut -d ' ' -f2 | xargs -I {} sudo nix-env --delete-generations --profile /nix/var/nix/profiles/system {}"; programs.bash.shellAliases = {
# Nix rebuild, switch
nrs = "pushd /etc/nixos && { trap 'popd' EXIT; sudo nixos-rebuild switch --flake .#$(hostname); }";
# Nix flake update, rebuild, switch
nus = "cd /etc/nixos && sudo nix flake update && sudo nixos-rebuild switch --flake .#$(hostname)";
# Special cleanup, needed when efi partition runs out of space. Deletes all but the last five generations.
# Remember to make that partition bigger in the future...
neficlean = "sudo nix-env --list-generations --profile /nix/var/nix/profiles/system | head -n -5 | cut -d ' ' -f2 | xargs -I {} sudo nix-env --delete-generations --profile /nix/var/nix/profiles/system {}";
}; };
} }

View File

@@ -1,4 +1,11 @@
{ config, pkgs, ... }: { config, pkgs, ... }:
let
hyprlandConfigPath = ./. + "/dotfiles/hyprland/${config.networking.hostName}";
kanshiConfigPath = ./. + "/dotfiles/kanshi/${config.networking.hostName}";
spotifyPlayerAppTomlTextTemplate = builtins.readFile ./dotfiles/spotify-player/app.toml;
spotifyPlayerAppTomlText = builtins.replaceStrings [ "{{hostname}}" ] [ config.networking.hostName ] spotifyPlayerAppTomlTextTemplate;
waybarConfigPath = ./. + "/dotfiles/waybar/${config.networking.hostName}";
in
{ {
users.users.caperren = { users.users.caperren = {
isNormalUser = true; isNormalUser = true;
@@ -11,8 +18,28 @@
"plugdev" "plugdev"
"adbusers" "adbusers"
]; ];
packages = with pkgs; [ };
home-manager.users.caperren = {
home.username = "caperren";
home.homeDirectory = "/home/caperren";
home.stateVersion = "25.05";
home.packages = with pkgs; [
obsidian obsidian
]; ];
programs.git = {
enable = true;
userName = "Corwin Perren";
userEmail = "caperren@gmail.com";
};
home.file.".config/hypr/hyprland-common.conf".source = ./dotfiles/hyprland/hyprland-common.conf;
home.file.".config/hypr/hyprland.conf".source = hyprlandConfigPath + "/hyprland.conf";
home.file.".config/kanshi/config".source = kanshiConfigPath + "/config";
home.file.".config/spotify-player/app.toml".text = spotifyPlayerAppTomlText;
home.file.".config/waybar/config".source = waybarConfigPath + "/config";
home.file.".config/wlogout/layout".source = ./dotfiles/wlogout/layout;
}; };
} }

View File

@@ -0,0 +1,9 @@
# Unfortunate legacy config needed because hyprland can't hot switch variable refresh rate
monitor=DP-2,3440x1440@144,auto,1,vrr,1
# Source configs
source = ~/.config/hypr/hyprland-common.conf
# Application launch
exec-once = sleep 10 && steam -silent
#exec-once = swayidle -w timeout 600 "hyprlock" before-sleep "hyprlock" &

View File

@@ -0,0 +1,5 @@
# Unfortunate legacy config needed because hyprland can't hot switch variable refresh rate
monitor=eDP-2,2560x1600@165,auto,1,vrr,1
# Source configs
source = ~/.config/hypr/hyprland-common.conf

View File

@@ -0,0 +1,173 @@
# Always enable new monitors in automatic mode
monitor=,preferred,auto,1
# Set programs that you use
$terminal = kitty
$fileManager = thunar
$menu = wofi --show drun
# Some default env vars.
env = XCURSOR_SIZE,24
env = QT_QPA_PLATFORMTHEME,qt5ct # change to qt6ct if you have that
input {
kb_layout = us
kb_variant =
kb_model =
kb_options =
kb_rules =
follow_mouse = 1
touchpad {
natural_scroll = no
}
sensitivity = 0 # -1.0 to 1.0, 0 means no modification.
numlock_by_default = 1
}
general {
gaps_in = 5
gaps_out = 5
border_size = 2
col.active_border = rgba(0D8A1EFF)
col.inactive_border = rgba(595959aa)
layout = dwindle
# Please see https://wiki.hyprland.org/Configuring/Tearing/ before you turn this on
allow_tearing = false
}
decoration {
rounding = 10
blur {
enabled = true
size = 3
passes = 1
}
shadow {
enabled = true
range = 4
render_power = 3
color = rgba(1a1a1aee)
}
}
animations {
enabled = yes
bezier = myBezier, 0.05, 0.9, 0.1, 1.05
animation = windows, 1, 7, myBezier
animation = windowsOut, 1, 7, default, popin 80%
animation = border, 1, 10, default
animation = borderangle, 1, 8, default
animation = fade, 1, 7, default
animation = workspaces, 1, 6, default
}
dwindle {
pseudotile = yes # master switch for pseudotiling. Enabling is bound to mainMod + P in the keybinds section below
preserve_split = yes # you probably want this
}
gestures {
workspace_swipe = off
}
misc {
force_default_wallpaper = 1 # Set to 0 or 1 to disable the anime mascot wallpapers
}
windowrulev2 = suppressevent maximize, class:.* # You'll probably like this.
$mainMod = SUPER
bind = $mainMod, T, exec, $terminal
bind = $mainMod, C, killactive,
# Launch terminal
bind = SHIFT_SUPER, Return, exec, $terminal
# Close active window
bind = $mainMod, Shift+q, killactive,
bind = $mainMod, M, exit,
bind = $mainMod, E, exec, $fileManager
bind = $mainMod, V, togglefloating,
bind = $mainMod, R, exec, $menu
bind = $mainMod, P, pseudo, # dwindle
bind = $mainMod, J, togglesplit, # dwindle
bind = $mainMod, F, fullscreen
# Move focus with mainMod + arrow keys
bind = $mainMod, left, movefocus, l
bind = $mainMod, right, movefocus, r
bind = $mainMod, up, movefocus, u
bind = $mainMod, down, movefocus, d
# Switch workspaces with mainMod + [0-9]
bind = $mainMod, 1, workspace, 1
bind = $mainMod, 2, workspace, 2
bind = $mainMod, 3, workspace, 3
bind = $mainMod, 4, workspace, 4
bind = $mainMod, 5, workspace, 5
bind = $mainMod, 6, workspace, 6
bind = $mainMod, 7, workspace, 7
bind = $mainMod, 8, workspace, 8
bind = $mainMod, 9, workspace, 9
bind = $mainMod, 0, workspace, 10
# Move active window to a workspace with mainMod + SHIFT + [0-9]
bind = $mainMod SHIFT, 1, movetoworkspace, 1
bind = $mainMod SHIFT, 2, movetoworkspace, 2
bind = $mainMod SHIFT, 3, movetoworkspace, 3
bind = $mainMod SHIFT, 4, movetoworkspace, 4
bind = $mainMod SHIFT, 5, movetoworkspace, 5
bind = $mainMod SHIFT, 6, movetoworkspace, 6
bind = $mainMod SHIFT, 7, movetoworkspace, 7
bind = $mainMod SHIFT, 8, movetoworkspace, 8
bind = $mainMod SHIFT, 9, movetoworkspace, 9
bind = $mainMod SHIFT, 0, movetoworkspace, 10
# Example special workspace (scratchpad)
bind = $mainMod, S, togglespecialworkspace, magic
bind = $mainMod SHIFT, S, movetoworkspace, special:magic
# Scroll through existing workspaces with mainMod + scroll
bind = $mainMod, mouse_down, workspace, e+1
bind = $mainMod, mouse_up, workspace, e-1
# Move/resize windows with mainMod + LMB/RMB and dragging
bindm = $mainMod, mouse:272, movewindow
bindm = $mainMod, mouse:273, resizewindow
# Volume Keys
bindl=, XF86AudioRaiseVolume, exec, wpctl set-volume -l 1.0 @DEFAULT_AUDIO_SINK@ 2%+
bindl=, XF86AudioLowerVolume, exec, wpctl set-volume -l 0.0 @DEFAULT_AUDIO_SINK@ 2%-
bindl=, XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle
# Media Controls
bindl=, XF86AudioPlay, exec, playerctl play-pause
bindl=, XF86AudioPrev, exec, playerctl previous
bindl=, XF86AudioNext, exec, playerctl next
# Brightness Controls
bind = ,XF86MonBrightnessDown, exec, brightnessctl s 1%-
bind = ,XF86MonBrightnessUp, exec, brightnessctl s +1%
# Application launch
exec-once = kanshi &
exec-once = ydotoold &
exec-once = sleep 3 && waybar
exec-once = sleep 5 && nm-applet
exec-once = sleep 5 && blueman-applet
exec-once = sleep 5 && streamdeck -n
exec-once = sleep 5 & telegram-desktop -startintray

View File

@@ -0,0 +1,7 @@
# `hyprctl monitors list` for all outputs
profile office_desk {
output "Hewlett Packard HP Z27n CNK7311FCY" enable position 0,0
output "LG Electronics LG ULTRAGEAR 104NTVS1N751" enable mode 3440x1440@143.92Hz position -440,1440 adaptive_sync on
output "BOE Display 0x00000060" enable position 950,2880 scale 1.0
}

View File

@@ -0,0 +1,26 @@
# `hyprctl monitors list` for all outputs
profile builtin_only {
output "BOE 0x0A9B Unknown" enable mode 2560x1600@165Hz position 0,0 adaptive_sync on
}
profile bedroom_desk {
# Top left to right
output "Dell Inc. DELL P2411H F8NDP11G0DVU" enable position 0,1280
output "Acer Technologies CB292CU 2217018D42410" enable position 1920,0 transform 90
output "DLOGIC Ltd. No Monitor USB_601e-21H1" enable position 3000,1280
# output "DLOGIC Ltd. No Monitor USB_601e-21H1" mode --custom 1920x1080@60Hz enable position 3000,1280
# Bottom left to right
output "Aculab Ltd Digital Unknown" enable transform 270 position 0,2360
output "Hewlett Packard HP Z27n CNK7311DRR" enable position 1440,2560
output "Aculab Ltd QHD270 Unknown" enable transform 90 position 4000,2360
# Far bottom right (laptop itself)
output "BOE 0x0A9B Unknown" enable position 5440,2360 adaptive_sync on
}
profile scotts_apartment_tv {
output "BOE 0x0A9B Unknown" enable mode 2560x1600@165Hz position 0,0 adaptive_sync on
output "Hisense Electric Co., Ltd. HISENSE 0x00000001" enable mode 1920x1080@60Hz position 2560,0
}

View File

@@ -0,0 +1,49 @@
theme = "dracula"
client_id = "65b708073fc0480ea92a077233ca87bd"
client_port = 8080
login_redirect_uri = "http://127.0.0.1:8989/login"
playback_format = """
{status} {track} • {artists}
{album}
{metadata}"""
notify_timeout_in_secs = 0
tracks_playback_limit = 1000
app_refresh_duration_in_ms = 32
playback_refresh_duration_in_ms = 0
page_size_in_rows = 20
play_icon = "▶"
pause_icon = "▌▌"
liked_icon = "♥"
border_type = "Plain"
progress_bar_type = "Rectangle"
cover_img_length = 9
cover_img_width = 5
cover_img_scale = 1.0
enable_media_control = true
enable_streaming = "Always"
enable_notify = true
enable_cover_image_cache = true
default_device = "{{hostname}}"
notify_streaming_only = false
seek_duration_secs = 5
[notify_format]
summary = "{track} • {artists}"
body = "{album}"
[layout]
playback_window_position = "Top"
playback_window_height = 6
[layout.library]
playlist_percent = 40
album_percent = 40
[device]
name = "{{hostname}}"
device_type = "speaker"
volume = 100
bitrate = 320
audio_cache = false
normalization = false
autoplay = false

View File

@@ -0,0 +1,122 @@
{
"layer": "top",
"position": "top",
"modules-left": [
"custom/logo",
"clock",
"disk",
"memory",
"cpu",
"hyprland/window"
],
"modules-center": [
"hyprland/workspaces"
],
"modules-right": [
"tray",
"idle_inhibitor",
"pulseaudio",
"custom/exit"
],
"reload_style_on_change": true,
"custom/logo": {
"format": "<span font='20'></span>",
"tooltip": false
},
"hyprland/workspaces": {
"all-outputs": false,
"format": "{icon}",
"format-icons": {
"1": "1",
"2": "2",
"3": "3",
"4": "4",
"5": "5",
"6": "6",
"7": "7",
"8": "8",
"9": "9"
}
},
"idle_inhibitor": {
"format": "<span font='16'>{icon}</span>",
"format-icons": {
"activated": "󰈈",
"deactivated": "󰈉"
}
},
"clock": {
"format": "{:%I:%M:%S %p | %a | %F}",
"interval": 1,
"tooltip-format": "\n<big>{:%Y %B}</big>\n<tt><small>{calendar}</small></tt>",
"calendar-weeks-pos": "right",
"today-format": "<span color='#7645AD'><b><u>{}</u></b></span>",
"format-calendar": "<span color='#aeaeae'><b>{}</b></span>",
"format-calendar-weeks": "<span color='#aeaeae'><b>W{:%V}</b></span>",
"format-calendar-weekdays": "<span color='#aeaeae'><b>{}</b></span>"
},
"disk": {
"interval": 30,
"format": " {percentage_used}%",
"path": "/"
},
"cpu": {
"interval": 1,
"format": " {usage}%",
"min-length": 6,
"max-length": 6,
"format-icons": [
"▁",
"▂",
"▃",
"▄",
"▅",
"▆",
"▇",
"█"
]
},
"memory": {
"format": " {percentage}%"
},
"hyprland/window": {
"format": "( {class} )",
"rewrite": {
"(.*) - Mozilla Firefox": "🌎 $1",
"(.*) - zsh": "> [$1]"
}
},
"pulseaudio": {
"format": "{volume:02}% {icon}",
"format-bluetooth": "󰂰",
"format-muted": "00% {icon}",
"format-icons": {
"headphones": "",
"bluetooth": "󰥰",
"handsfree": "",
"headset": "󱡬",
"phone": "",
"portable": "",
"car": "",
"default": [
"🕨",
"🕩",
"🕪"
]
},
"justify": "center",
"on-click": "amixer sset Master toggle",
"on-click-right": "pavucontrol",
"tooltip-format": "{icon} {volume:02}%"
},
"tray": {
"icon-size": 14,
"spacing": 10
},
"custom/exit": {
"format": "",
"on-click": "wlogout -b 2",
"tooltip": false
}
}

View File

@@ -0,0 +1,149 @@
{
"layer": "top",
"position": "top",
"modules-left": [
"custom/logo",
"clock",
"disk",
"memory",
"cpu",
"hyprland/window"
],
"modules-center": [
"hyprland/workspaces"
],
"modules-right": [
"tray",
"idle_inhibitor",
"pulseaudio",
"battery",
"backlight",
"custom/exit"
],
"reload_style_on_change": true,
"custom/logo": {
"format": "<span font='20'></span>",
"tooltip": false
},
"hyprland/workspaces": {
"all-outputs": false,
"format": "{icon}",
"format-icons": {
"1": "1",
"2": "2",
"3": "3",
"4": "4",
"5": "5",
"6": "6",
"7": "7",
"8": "8",
"9": "9"
}
},
"backlight": {
"device": "intel_backlight",
"format": "{percent}% {icon}",
"format-icons": [
"",
""
]
},
"battery": {
"bat": "BAT0",
"interval": 60,
"states": {
"warning": 30,
"critical": 15
},
"format": "{capacity}% {icon}",
"format-icons": [
"",
"",
"",
"",
""
],
"max-length": 25
},
"idle_inhibitor": {
"format": "<span font='16'>{icon}</span>",
"format-icons": {
"activated": "󰈈",
"deactivated": "󰈉"
}
},
"clock": {
"format": "{:%I:%M:%S %p | %a | %F}",
"interval": 1,
"tooltip-format": "\n<big>{:%Y %B}</big>\n<tt><small>{calendar}</small></tt>",
"calendar-weeks-pos": "right",
"today-format": "<span color='#7645AD'><b><u>{}</u></b></span>",
"format-calendar": "<span color='#aeaeae'><b>{}</b></span>",
"format-calendar-weeks": "<span color='#aeaeae'><b>W{:%V}</b></span>",
"format-calendar-weekdays": "<span color='#aeaeae'><b>{}</b></span>"
},
"disk": {
"interval": 30,
"format": " {percentage_used}%",
"path": "/"
},
"cpu": {
"interval": 1,
"format": " {usage}%",
"min-length": 6,
"max-length": 6,
"format-icons": [
"▁",
"▂",
"▃",
"▄",
"▅",
"▆",
"▇",
"█"
]
},
"memory": {
"format": " {percentage}%"
},
"hyprland/window": {
"format": "( {class} )",
"rewrite": {
"(.*) - Mozilla Firefox": "🌎 $1",
"(.*) - zsh": "> [$1]"
}
},
"pulseaudio": {
"format": "{volume:02}% {icon}",
"format-bluetooth": "󰂰",
"format-muted": "00% {icon}",
"format-icons": {
"headphones": "",
"bluetooth": "󰥰",
"handsfree": "",
"headset": "󱡬",
"phone": "",
"portable": "",
"car": "",
"default": [
"🕨",
"🕩",
"🕪"
]
},
"justify": "center",
"on-click": "amixer sset Master toggle",
"on-click-right": "pavucontrol",
"tooltip-format": "{icon} {volume:02}%"
},
"tray": {
"icon-size": 14,
"spacing": 10
},
"custom/exit": {
"format": "",
"on-click": "wlogout -b 2",
"tooltip": false
}
}

View File

@@ -0,0 +1,24 @@
{
"label" : "lock",
"action" : "hyprlock",
"text" : "Lock",
"keybind" : "l"
}
{
"label" : "logout",
"action" : "loginctl terminate-user $USER",
"text" : "Logout",
"keybind" : "e"
}
{
"label" : "shutdown",
"action" : "systemctl poweroff",
"text" : "Shutdown",
"keybind" : "s"
}
{
"label" : "reboot",
"action" : "systemctl reboot",
"text" : "Reboot",
"keybind" : "r"
}

View File

@@ -9,14 +9,17 @@
"input" "input"
"dialout" "dialout"
]; ];
packages = with pkgs; [ ];
}; };
services.displayManager.autoLogin = { services.displayManager.autoLogin = {
enable = true; enable = true;
user = "crestline"; user = "crestline";
}; };
services.xserver.displayManager.gdm.autoLogin.delay = 60; services.xserver.displayManager.gdm.autoLogin.delay = 60;
home-manager.users.crestline = {
home.username = "crestline";
home.homeDirectory = "/home/crestline";
home.stateVersion = "25.05";
};
} }