moved around dotfiles to focus around nix configuration, as most of my systems already utilize Nix/NixOS in some capacity.

This commit is contained in:
lulusilly 2025-12-25 15:34:38 -04:00
parent eb01c9561f
commit 890c29afca
28 changed files with 47 additions and 255 deletions

48
nix/flake.lock generated Executable file
View file

@ -0,0 +1,48 @@
{
"nodes": {
"home-manager": {
"inputs": {
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1757809953,
"narHash": "sha256-29mlXbfAJhz9cWVrPP4STvVPDVZFCfCOmaIN5lFJa+Y=",
"owner": "nix-community",
"repo": "home-manager",
"rev": "17a10049486f6698fca32097d8f52c0c895542b0",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "home-manager",
"type": "github"
}
},
"nixpkgs": {
"locked": {
"lastModified": 1756542300,
"narHash": "sha256-tlOn88coG5fzdyqz6R93SQL5Gpq+m/DsWpekNFhqPQk=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "d7600c775f877cd87b4f5a831c28aa94137377aa",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"root": {
"inputs": {
"home-manager": "home-manager",
"nixpkgs": "nixpkgs"
}
}
},
"root": "root",
"version": 7
}

30
nix/flake.nix Executable file
View file

@ -0,0 +1,30 @@
{
description = "System flake";
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
home-manager = {
url = "github:nix-community/home-manager";
inputs.nixpkgs.follows = "nixpkgs";
};
};
outputs = { self, nixpkgs, ... }@inputs: {
nixosConfigurations = {
mecca = nixpkgs.lib.nixosSystem {
system = "x86_64-linux";
specialArgs = {inherit inputs;};
modules = [
./hosts/common.nix
./hosts/mecca/configuration.nix
];
};
cantor = nixpkgs.lib.nixosSystem {
system = "x86_64-linux";
specialArgs = {inherit inputs;};
modules = [
./hosts/common.nix
./hosts/cantor/configuration.nix
];
};
};
};
}

View file

@ -0,0 +1,18 @@
{ config, pkgs, lib, inputs, ... }:
{
imports =
[
./hardware-configuration.nix
../../modules/kanata/kanata.nix
../../modules/laptop.nix
../../modules/efi.nix
../../modules/hypr.nix
../../modules/syncthing.nix
];
networking.hostName = "cantor";
# Overriding this, as the touchpad doesn't work properly anymore.
services.libinput.enable = lib.mkForce false;
system.stateVersion = "25.05";
}

View file

@ -0,0 +1,46 @@
# 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" "ahci" "nvme" "usb_storage" "sd_mod" ];
boot.initrd.kernelModules = [ ];
boot.kernelModules = [ "kvm-intel" ];
boot.extraModulePackages = [ ];
fileSystems."/" =
{ device = "/dev/disk/by-uuid/b6a3dc2d-983b-4be5-a1ae-e834b786377f";
fsType = "ext4";
};
fileSystems."/boot" =
{ device = "/dev/disk/by-uuid/12CE-A600";
fsType = "vfat";
options = [ "fmask=0022" "dmask=0022" ];
};
fileSystems."/data/hdd" =
{ device = "/dev/disk/by-uuid/8db7c071-8946-4619-96fd-83259ae8d228";
fsType = "xfs";
};
swapDevices =
[ { device = "/dev/disk/by-uuid/222e2b22-388c-490a-845f-35f774c395a8"; }
];
# Enables DHCP on each ethernet and wireless interface. In case of scripted networking
# (the default) this is the recommended approach. When using systemd-networkd it's
# still possible to use this option, but it's recommended to use it in conjunction
# with explicit per-interface declarations with `networking.interfaces.<interface>.useDHCP`.
networking.useDHCP = lib.mkDefault true;
# networking.interfaces.enp4s0.useDHCP = lib.mkDefault true;
# networking.interfaces.wlp5s0.useDHCP = lib.mkDefault true;
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
}

94
nix/hosts/common.nix Executable file
View file

@ -0,0 +1,94 @@
{ config, lib, pkgs, inputs, ... }:
{
imports = [
inputs.home-manager.nixosModules.default
];
# Set default user lunita
users.users.lunita = {
isNormalUser = true;
description = "Lunita";
extraGroups = [ "networkmanager" "wheel" "syncthing" ];
shell = pkgs.zsh;
};
home-manager = {
extraSpecialArgs = { inherit inputs; };
users = {
"lunita" = import ./home.nix;
};
};
# Enable automatic system updates
system.autoUpgrade = {
enable = true;
flake = inputs.self.outPath;
flags = [
"--update-input"
"nixpkgs"
"-L" # print build logs
];
dates = "weekly";
randomizedDelaySec = "45min";
};
# Automate Nix garbage collection
nix.gc = {
automatic = true;
dates = "weekly";
options = "--delete-older-than 7d";
};
# Allow non-free software (RMS will be mad at me :<)
nixpkgs.config.allowUnfree = true;
# Enable nix-command and flakes
nix.settings.experimental-features = [ "nix-command" "flakes"];
# using piprewire cuz embrace muh modernity
services.pipewire = {
enable = true;
pulse.enable = true;
};
# Basic configuration stuff - WiFi, Xserver keyboard layout, Stylix
networking.networkmanager.enable = true;
time.timeZone = "America/St_Thomas"; # Timezone => AST
i18n.defaultLocale = "en_US.UTF-8";
services.xserver.xkb = {
layout = "us";
variant = "";
};
# Zsh
programs.zsh.enable = true;
# Browser
programs.firefox.enable = true;
# Flatpak
services.flatpak.enable = true;
# Tailscale
services.tailscale.enable = true;
# GPG
programs.gnupg.agent = {
enable = true;
enableSSHSupport = true;
};
# OpenSSH
services.openssh.enable = true;
# Hardware acceleration support
hardware.graphics.extraPackages = with pkgs; [
intel-media-driver
];
# Enable udisks2 for removable media support
services.udisks2.enable = true;
# Can't disable sudo due to dependency for nixos-rebuild
# security.sudo.enable = false;
# Setup doas
security.doas = {
enable = true;
extraRules = [{
users = ["lunita"];
keepEnv = true;
noPass = true;
}];
};
# System package definitions
environment.systemPackages = with pkgs; [
neovim # Terminal text editor
wget # coreutil for some script compatibility
wiremix # TUI mixer for pipewire
];
}

95
nix/hosts/dots/.emacs.d/init.el Executable file
View file

@ -0,0 +1,95 @@
; Setting default Emacs window dimensions
(push '(tool-bar-lines . 0) default-frame-alist)
(push '(width . 75) default-frame-alist)
(push '(height . 30) default-frame-alist)
;; Setting default font
(set-frame-font
(cond
((member "Monocraft" (font-family-list)) "Monocraft")
((member "Miracode" (font-family-list)) "Miracode")
((member "Cascadia Mono-16" (font-family-list)) "Cascadia Mono")
(t nil)
)
t t
)
;; Set default tab width (in spaces)
(setq-default tab-width 2)
;; Store customizations in a separate file
(setq custom-file (expand-file-name "custom.el" user-emacs-directory))
;; Load it if the file exists
(when (file-exists-p custom-file)
(load custom-file))
;; Setup MELPA
(require 'package) (setq package-archives '(("melpa" . "https://melpa.org/packages/") ("org" . "https://orgmode.org/elpa/") ("elpa" . "https://elpa.gnu.org/packages/")))
;; Setup package.el
(unless (package-installed-p 'use-package)
(package-refresh-contents)
(package-install 'use-package)
(eval-when-compile
(unless (bound-and-true-p package--initialized)
(package-initialize))
(require 'use-package)))
(setq use-package-always-ensure t)
;; For up to date org mode.
(use-package org)
;; Enable Org mode
(require 'org)
;; Enable Babel for specific languages
(org-babel-do-load-languages
'org-babel-load-languages
'((emacs-lisp . t) ;; Elisp support
(scheme . t) ;; Scheme Lisp support
(lisp . t) ;; Common Lisp support
(lua . t) ;; Lua support
(latex . t) ;; Latex support
(shell . t)) ;; Posix Shell support
)
;; Set the default export directory
(setq org-export-directory "~/org_exports/")
;; Show inline images in org documents
(setq org-startup-with-inline-images t)
;; Set default directory based on operating system
(cond
;; If using Windows
((eq system-type 'windows-nt)
(setq default-directory (format "C:\\Users\\%s\\Documents" (user-login-name))))
;; If using GNU/Linux
((eq system-type 'gnu/linux)
(setq default-directory (format "/home/%s" (user-login-name))))
;; If using macOS
((eq system-type 'darwin)
(setq default-directory (format "/Users/%s" (user-login-name))))
)
;; Themeing
(use-package gruvbox-theme) ;; Gruvbox is comfy
(load-theme 'gruvbox-dark-hard) ;; Dark because I'm a parasite
; For Unix-like operating systems only running the GUI.
(add-to-list 'default-frame-alist '(alpha-background . 80))
(use-package doom-modeline
:ensure t
:init (doom-modeline-mode 1))
;; Technically useless but cute for fullscreen editing.
(use-package nyan-mode
:init
(nyan-mode))
;; Requires the JetBrains Mono font be installed on the system.
(add-to-list 'default-frame-alist '(font . "JetBrains Mono-12"))
;; I've been using Neovim a lot lately, so I'm using Evil mode for the
;; time being. I think XFK is technically better, but it messes with
;; my muscle memory a bit, and I need to be able to get stuff done,
;; frankly. I'm already wasting time configuring Emacs (*  ̄︿ ̄)
(use-package evil
:init ;; tweak evil's configuration before loading it
(setq evil-want-keybinding nil)
(setq evil-vsplit-window-right t)
(setq evil-split-window-below t)
(evil-mode)
)
;; MINIMALISM
(menu-bar-mode -1)
(tool-bar-mode -1)
;; Misc stuff
(defalias 'yes-or-no-p 'y-or-n-p)
(column-number-mode 1)
(setq make-backup-files nil)
(setq global-visual-line-mode t)

19
nix/hosts/dots/ghostty/config Executable file
View file

@ -0,0 +1,19 @@
font-family = "Miracode"
background-opacity = 0.8
theme = "IC_Orange_PPL"
mouse-hide-while-typing = true
keybind = ctrl+n=new_window
keybind = ctrl+h=goto_split:left
keybind = ctrl+j=goto_split:down
keybind = ctrl+k=goto_split:up
keybind = ctrl+l=goto_split:right
keybind = ctrl+shift+h=new_split:left
keybind = ctrl+shift+j=new_split:down
keybind = ctrl+shift+k=new_split:up
keybind = ctrl+shift+l=new_split:right
keybind = ctrl+f=toggle_split_zoom
window-save-state = always

BIN
nix/hosts/dots/hypr/bg.jpg Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

238
nix/hosts/dots/hypr/hyprland.conf Executable file
View file

@ -0,0 +1,238 @@
ecosystem:no_update_news = true
# See https://wiki.hypr.land/Configuring/Monitors/
monitor=,preferred,auto,auto
###################
### MY PROGRAMS ###
###################
$terminal = ghostty
$browser = firefox
$fileManager = lf
############################
### AUTO STARTUP ###
############################
exec-once = bash ~/.config/hypr/start.sh
exec-once = $terminal
#############################
### ENVIRONMENT VARIABLES ###
#############################
# See https://wiki.hypr.land/Configuring/Environment-variables/
env = XCURSOR_SIZE,24
env = HYPRCURSOR_SIZE,24
#####################
### LOOK AND FEEL ###
#####################
# Refer to https://wiki.hypr.land/Configuring/Variables/
# https://wiki.hypr.land/Configuring/Variables/#general
general {
gaps_in = 5
gaps_out = 15
border_size = 2
# https://wiki.hypr.land/Configuring/Variables/#variable-types for info about colors
col.active_border = rgba(33ccffee) rgba(00ff99ee) 45deg
col.inactive_border = rgba(595959aa)
# Set to true enable resizing windows by clicking and dragging on borders and gaps
resize_on_border = false
# Please see https://wiki.hypr.land/Configuring/Tearing/ before you turn this on
allow_tearing = false
layout = dwindle
}
decoration {
rounding = 10
rounding_power = 2
# Change transparency of focused and unfocused windows
active_opacity = 1.0
inactive_opacity = 0.70
shadow {
enabled = true
range = 4
render_power = 3
color = rgba(1a1a1aee)
}
# https://wiki.hypr.land/Configuring/Variables/#blur
blur {
enabled = true
size = 3
passes = 1
vibrancy = 0.1696
}
}
animations {
enabled = yes, please :)
bezier = easeOutQuint,0.23,1,0.32,1
bezier = easeInOutCubic,0.65,0.05,0.36,1
bezier = linear,0,0,1,1
bezier = almostLinear,0.5,0.5,0.75,1.0
bezier = quick,0.15,0,0.1,1
animation = global, 1, 10, default
animation = border, 1, 5.39, easeOutQuint
animation = windows, 1, 4.79, easeOutQuint
animation = windowsIn, 1, 4.1, easeOutQuint, popin 87%
animation = windowsOut, 1, 1.49, linear, popin 87%
animation = fadeIn, 1, 1.73, almostLinear
animation = fadeOut, 1, 1.46, almostLinear
animation = fade, 1, 3.03, quick
animation = layers, 1, 3.81, easeOutQuint
animation = layersIn, 1, 4, easeOutQuint, fade
animation = layersOut, 1, 1.5, linear, fade
animation = fadeLayersIn, 1, 1.79, almostLinear
animation = fadeLayersOut, 1, 1.39, almostLinear
animation = workspaces, 1, 1.94, almostLinear, fade
animation = workspacesIn, 1, 1.21, almostLinear, fade
animation = workspacesOut, 1, 1.94, almostLinear, fade
}
# Ref https://wiki.hypr.land/Configuring/Workspace-Rules/
# "Smart gaps" / "No gaps when only"
# uncomment all if you wish to use that.
# workspace = w[tv1], gapsout:0, gapsin:0
# workspace = f[1], gapsout:0, gapsin:0
# windowrule = bordersize 0, floating:0, onworkspace:w[tv1]
# windowrule = rounding 0, floating:0, onworkspace:w[tv1]
# windowrule = bordersize 0, floating:0, onworkspace:f[1]
# windowrule = rounding 0, floating:0, onworkspace:f[1]
dwindle {
pseudotile = true # Master switch for pseudotiling. Enabling is bound to mainMod + P in the keybinds section below
preserve_split = true # You probably want this
}
master {
new_status = master
}
misc {
force_default_wallpaper = 0 # Set to 0 or 1 to disable the anime mascot wallpapers
disable_hyprland_logo = true # If true disables the random hyprland logo / anime girl background. :(
}
#############
### INPUT ###
#############
input {
kb_layout = us
kb_variant =
kb_model =
kb_options =
kb_rules =
follow_mouse = 1
sensitivity = 0 # -1.0 - 1.0, 0 means no modification.
touchpad {
natural_scroll = false
}
}
gestures {
workspace_swipe = true;
}
###################
### Keybindings ###
###################
$mainMod = SUPER Control_L Alt_L Shift # Primary mod key is Hyper key
$secMod = SUPER # Secondary mod key is Super
$tMod = Alt # Third mod key is Alt
bind = $mainMod, T, exec, $terminal
bind = $mainMod, Q, killactive,
bind = $mainMod, Escape, exit,
bind = $secMod, S, exec, grim -l 0 -g "$(slurp)" - | wl-copy
bind = $mainMod, E, exec, $fileManager
bind = $mainMod, B, exec, $browser
bind = $mainMod, V, togglefloating,
bind = $mainMod, D, exec, rofi -show drun -show-icons
# Move focus with Alt + arrow keys
bind = $tMod, H, movefocus, l
bind = $tMod, L, movefocus, r
bind = $tMod, K, movefocus, u
bind = $tMod, J, movefocus, d
# Switch workspaces with Alt + [Q-P]
bind = $tMod, Q, workspace, 1
bind = $tMod, W, workspace, 2
bind = $tMod, E, workspace, 3
bind = $tMod, R, workspace, 4
bind = $tMod, T, workspace, 5
bind = $tMod, Y, workspace, 6
bind = $tMod, U, workspace, 7
bind = $tMod, I, workspace, 8
bind = $tMod, O, workspace, 9
bind = $tMod, P, workspace, 10
# Move active window to a workspace with Alt + Shift + [Q-P]
bind = $tMod SHIFT, Q, movetoworkspace, 1
bind = $tMod SHIFT, W, movetoworkspace, 2
bind = $tMod SHIFT, E, movetoworkspace, 3
bind = $tMod SHIFT, R, movetoworkspace, 4
bind = $tMod SHIFT, T, movetoworkspace, 5
bind = $tMod SHIFT, Y, movetoworkspace, 6
bind = $tMod SHIFT, U, movetoworkspace, 7
bind = $tMod SHIFT, I, movetoworkspace, 8
bind = $tMod SHIFT, O, movetoworkspace, 9
bind = $tMod SHIFT, P, movetoworkspace, 10
# Example special workspace (scratchpad)
bind = $tMod, S, togglespecialworkspace, magic
bind = $tMod 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
# Laptop multimedia keys for volume and LCD brightness
bindel = ,XF86AudioRaiseVolume, exec, wpctl set-volume -l 1 @DEFAULT_AUDIO_SINK@ 5%+
bindel = ,XF86AudioLowerVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-
bindel = ,XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle
bindel = ,XF86AudioMicMute, exec, wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle
bindel = ,XF86MonBrightnessUp, exec, brightnessctl -e4 -n2 set 5%+
bindel = ,XF86MonBrightnessDown, exec, brightnessctl -e4 -n2 set 5%-
# Requires playerctl
bindl = , XF86AudioNext, exec, playerctl next
bindl = , XF86AudioPause, exec, playerctl play-pause
bindl = , XF86AudioPlay, exec, playerctl play-pause
bindl = , XF86AudioPrev, exec, playerctl previous
##############################
### WINDOWS AND WORKSPACES ###
##############################
# See https://wiki.hypr.land/Configuring/Window-Rules/ for more
# See https://wiki.hypr.land/Configuring/Workspace-Rules/ for workspace rules
# Example windowrule
# windowrule = float,class:^(kitty)$,title:^(kitty)$
# Ignore maximize requests from apps. You'll probably like this.
windowrule = suppressevent maximize, class:.*
windowrule = nofocus,class:^$,title:^$,xwayland:1,floating:1,fullscreen:0,pinned:0

6
nix/hosts/dots/hypr/start.sh Executable file
View file

@ -0,0 +1,6 @@
#!/usr/bin/env bash
# Wallpaper daemon (swww)
swww-daemon &
swww img ~/.config/hypr/bg.jpg &
waybar &
dunst

58
nix/hosts/dots/mpv/mpv.conf Executable file
View file

@ -0,0 +1,58 @@
profile=gpu-hq
vo=gpu-next
opengl-es=yes
[image]
osc=no
sub-auto=no
audio-file=no
term-status-msg=
loop-file=inf
no-pause
video-aspect-override=no
geometry=720x360
[extension.png]
profile=image
[extension.jpg]
profile=image
[extension.jpeg]
profile=image
[extension.webp]
profile=image
[extension.gif]
profile=image
[audio]
volume=50
geometry=300x300
[extension.mp3]
profile=audio
[extension.ogg]
profile=audio
[extension.flac]
profile=audio
[extension.wav]
profile=audio
[vids]
geometry=640x300
volume=50
[extension.webm]
profile=vids
loop-file=inf
[extension.mp4]
profile=vids
[extension.mkv]
profile=vids

View file

@ -0,0 +1,862 @@
print_info() {
info title
info underline
info "OS" distro
info "Host" model
# info "Kernel" kernel
info "Uptime" uptime
# info "Packages" packages
# info "Shell" shell
info "Resolution" resolution
# info "DE" de
# info "WM" wm
# info "WM Theme" wm_theme
# info "Theme" theme
# info "Icons" icons
# info "Terminal" term
# info "Terminal Font" term_font
info "CPU" cpu
# info "GPU" gpu
info "Memory" memory
# info "GPU Driver" gpu_driver # Linux/macOS only
# info "CPU Usage" cpu_usage
info "Disk" disk
info "Battery" battery
# info "Font" font
info "Song" song
[[ "$player" ]] && prin "Music Player" "$player"
info "Local IP" local_ip
# info "Public IP" public_ip
# info "Users" users
# info "Locale" locale # This only works on glibc systems.
info cols
}
# Title
# Hide/Show Fully qualified domain name.
#
# Default: 'off'
# Values: 'on', 'off'
# Flag: --title_fqdn
title_fqdn="off"
# Kernel
# Shorten the output of the kernel function.
#
# Default: 'on'
# Values: 'on', 'off'
# Flag: --kernel_shorthand
# Supports: Everything except *BSDs (except PacBSD and PC-BSD)
#
# Example:
# on: '4.8.9-1-ARCH'
# off: 'Linux 4.8.9-1-ARCH'
kernel_shorthand="on"
# Distro
# Shorten the output of the distro function
#
# Default: 'off'
# Values: 'on', 'tiny', 'off'
# Flag: --distro_shorthand
# Supports: Everything except Windows and Haiku
distro_shorthand="off"
# Show/Hide OS Architecture.
# Show 'x86_64', 'x86' and etc in 'Distro:' output.
#
# Default: 'on'
# Values: 'on', 'off'
# Flag: --os_arch
#
# Example:
# on: 'Arch Linux x86_64'
# off: 'Arch Linux'
os_arch="off"
# Uptime
# Shorten the output of the uptime function
#
# Default: 'on'
# Values: 'on', 'tiny', 'off'
# Flag: --uptime_shorthand
#
# Example:
# on: '2 days, 10 hours, 3 mins'
# tiny: '2d 10h 3m'
# off: '2 days, 10 hours, 3 minutes'
uptime_shorthand="tiny"
# Memory
# Show memory pecentage in output.
#
# Default: 'off'
# Values: 'on', 'off'
# Flag: --memory_percent
#
# Example:
# on: '1801MiB / 7881MiB (22%)'
# off: '1801MiB / 7881MiB'
memory_percent="off"
# Change memory output unit.
#
# Default: 'mib'
# Values: 'kib', 'mib', 'gib'
# Flag: --memory_unit
#
# Example:
# kib '1020928KiB / 7117824KiB'
# mib '1042MiB / 6951MiB'
# gib: ' 0.98GiB / 6.79GiB'
memory_unit="gib"
# Packages
# Show/Hide Package Manager names.
#
# Default: 'tiny'
# Values: 'on', 'tiny' 'off'
# Flag: --package_managers
#
# Example:
# on: '998 (pacman), 8 (flatpak), 4 (snap)'
# tiny: '908 (pacman, flatpak, snap)'
# off: '908'
package_managers="on"
# Shell
# Show the path to $SHELL
#
# Default: 'off'
# Values: 'on', 'off'
# Flag: --shell_path
#
# Example:
# on: '/bin/bash'
# off: 'bash'
shell_path="off"
# Show $SHELL version
#
# Default: 'on'
# Values: 'on', 'off'
# Flag: --shell_version
#
# Example:
# on: 'bash 4.4.5'
# off: 'bash'
shell_version="on"
# CPU
# CPU speed type
#
# Default: 'bios_limit'
# Values: 'scaling_cur_freq', 'scaling_min_freq', 'scaling_max_freq', 'bios_limit'.
# Flag: --speed_type
# Supports: Linux with 'cpufreq'
# NOTE: Any file in '/sys/devices/system/cpu/cpu0/cpufreq' can be used as a value.
speed_type="bios_limit"
# CPU speed shorthand
#
# Default: 'off'
# Values: 'on', 'off'.
# Flag: --speed_shorthand
# NOTE: This flag is not supported in systems with CPU speed less than 1 GHz
#
# Example:
# on: 'i7-6500U (4) @ 3.1GHz'
# off: 'i7-6500U (4) @ 3.100GHz'
speed_shorthand="on"
# Enable/Disable CPU brand in output.
#
# Default: 'on'
# Values: 'on', 'off'
# Flag: --cpu_brand
#
# Example:
# on: 'Intel i7-6500U'
# off: 'i7-6500U (4)'
cpu_brand="on"
# CPU Speed
# Hide/Show CPU speed.
#
# Default: 'on'
# Values: 'on', 'off'
# Flag: --cpu_speed
#
# Example:
# on: 'Intel i7-6500U (4) @ 3.1GHz'
# off: 'Intel i7-6500U (4)'
cpu_speed="on"
# CPU Cores
# Display CPU cores in output
#
# Default: 'logical'
# Values: 'logical', 'physical', 'off'
# Flag: --cpu_cores
# Support: 'physical' doesn't work on BSD.
#
# Example:
# logical: 'Intel i7-6500U (4) @ 3.1GHz' (All virtual cores)
# physical: 'Intel i7-6500U (2) @ 3.1GHz' (All physical cores)
# off: 'Intel i7-6500U @ 3.1GHz'
cpu_cores="logical"
# CPU Temperature
# Hide/Show CPU temperature.
# Note the temperature is added to the regular CPU function.
#
# Default: 'off'
# Values: 'C', 'F', 'off'
# Flag: --cpu_temp
# Supports: Linux, BSD
# NOTE: For FreeBSD and NetBSD-based systems, you'll need to enable
# coretemp kernel module. This only supports newer Intel processors.
#
# Example:
# C: 'Intel i7-6500U (4) @ 3.1GHz [27.2°C]'
# F: 'Intel i7-6500U (4) @ 3.1GHz [82.0°F]'
# off: 'Intel i7-6500U (4) @ 3.1GHz'
cpu_temp="C"
# GPU
# Enable/Disable GPU Brand
#
# Default: 'on'
# Values: 'on', 'off'
# Flag: --gpu_brand
#
# Example:
# on: 'AMD HD 7950'
# off: 'HD 7950'
gpu_brand="on"
# Which GPU to display
#
# Default: 'all'
# Values: 'all', 'dedicated', 'integrated'
# Flag: --gpu_type
# Supports: Linux
#
# Example:
# all:
# GPU1: AMD HD 7950
# GPU2: Intel Integrated Graphics
#
# dedicated:
# GPU1: AMD HD 7950
#
# integrated:
# GPU1: Intel Integrated Graphics
gpu_type="all"
# Resolution
# Display refresh rate next to each monitor
# Default: 'off'
# Values: 'on', 'off'
# Flag: --refresh_rate
# Supports: Doesn't work on Windows.
#
# Example:
# on: '1920x1080 @ 60Hz'
# off: '1920x1080'
refresh_rate="on"
# Gtk Theme / Icons / Font
# Shorten output of GTK Theme / Icons / Font
#
# Default: 'off'
# Values: 'on', 'off'
# Flag: --gtk_shorthand
#
# Example:
# on: 'Numix, Adwaita'
# off: 'Numix [GTK2], Adwaita [GTK3]'
gtk_shorthand="off"
# Enable/Disable gtk2 Theme / Icons / Font
#
# Default: 'on'
# Values: 'on', 'off'
# Flag: --gtk2
#
# Example:
# on: 'Numix [GTK2], Adwaita [GTK3]'
# off: 'Adwaita [GTK3]'
gtk2="on"
# Enable/Disable gtk3 Theme / Icons / Font
#
# Default: 'on'
# Values: 'on', 'off'
# Flag: --gtk3
#
# Example:
# on: 'Numix [GTK2], Adwaita [GTK3]'
# off: 'Numix [GTK2]'
gtk3="on"
# IP Address
# Website to ping for the public IP
#
# Default: 'http://ident.me'
# Values: 'url'
# Flag: --ip_host
public_ip_host="http://ident.me"
# Public IP timeout.
#
# Default: '2'
# Values: 'int'
# Flag: --ip_timeout
public_ip_timeout=2
# Desktop Environment
# Show Desktop Environment version
#
# Default: 'on'
# Values: 'on', 'off'
# Flag: --de_version
de_version="on"
# Disk
# Which disks to display.
# The values can be any /dev/sdXX, mount point or directory.
# NOTE: By default we only show the disk info for '/'.
#
# Default: '/'
# Values: '/', '/dev/sdXX', '/path/to/drive'.
# Flag: --disk_show
#
# Example:
# disk_show=('/' '/dev/sdb1'):
# 'Disk (/): 74G / 118G (66%)'
# 'Disk (/mnt/Videos): 823G / 893G (93%)'
#
# disk_show=('/'):
# 'Disk (/): 74G / 118G (66%)'
#
disk_show=('/')
# Disk subtitle.
# What to append to the Disk subtitle.
#
# Default: 'mount'
# Values: 'mount', 'name', 'dir', 'none'
# Flag: --disk_subtitle
#
# Example:
# name: 'Disk (/dev/sda1): 74G / 118G (66%)'
# 'Disk (/dev/sdb2): 74G / 118G (66%)'
#
# mount: 'Disk (/): 74G / 118G (66%)'
# 'Disk (/mnt/Local Disk): 74G / 118G (66%)'
# 'Disk (/mnt/Videos): 74G / 118G (66%)'
#
# dir: 'Disk (/): 74G / 118G (66%)'
# 'Disk (Local Disk): 74G / 118G (66%)'
# 'Disk (Videos): 74G / 118G (66%)'
#
# none: 'Disk: 74G / 118G (66%)'
# 'Disk: 74G / 118G (66%)'
# 'Disk: 74G / 118G (66%)'
disk_subtitle="mount"
# Disk percent.
# Show/Hide disk percent.
#
# Default: 'on'
# Values: 'on', 'off'
# Flag: --disk_percent
#
# Example:
# on: 'Disk (/): 74G / 118G (66%)'
# off: 'Disk (/): 74G / 118G'
disk_percent="on"
# Song
# Manually specify a music player.
#
# Default: 'auto'
# Values: 'auto', 'player-name'
# Flag: --music_player
#
# Available values for 'player-name':
#
# amarok
# audacious
# banshee
# bluemindo
# clementine
# cmus
# deadbeef
# deepin-music
# dragon
# elisa
# exaile
# gnome-music
# gmusicbrowser
# gogglesmm
# guayadeque
# io.elementary.music
# iTunes
# juk
# lollypop
# mocp
# mopidy
# mpd
# muine
# netease-cloud-music
# olivia
# playerctl
# pogo
# pragha
# qmmp
# quodlibet
# rhythmbox
# sayonara
# smplayer
# spotify
# strawberry
# tauonmb
# tomahawk
# vlc
# xmms2d
# xnoise
# yarock
music_player="auto"
# Format to display song information.
#
# Default: '%artist% - %album% - %title%'
# Values: '%artist%', '%album%', '%title%'
# Flag: --song_format
#
# Example:
# default: 'Song: Jet - Get Born - Sgt Major'
song_format="%artist% - %album% - %title%"
# Print the Artist, Album and Title on separate lines
#
# Default: 'off'
# Values: 'on', 'off'
# Flag: --song_shorthand
#
# Example:
# on: 'Artist: The Fratellis'
# 'Album: Costello Music'
# 'Song: Chelsea Dagger'
#
# off: 'Song: The Fratellis - Costello Music - Chelsea Dagger'
song_shorthand="off"
# 'mpc' arguments (specify a host, password etc).
#
# Default: ''
# Example: mpc_args=(-h HOST -P PASSWORD)
mpc_args=()
# Text Colors
# Text Colors
#
# Default: 'distro'
# Values: 'distro', 'num' 'num' 'num' 'num' 'num' 'num'
# Flag: --colors
#
# Each number represents a different part of the text in
# this order: 'title', '@', 'underline', 'subtitle', 'colon', 'info'
#
# Example:
# colors=(distro) - Text is colored based on Distro colors.
# colors=(4 6 1 8 8 6) - Text is colored in the order above.
colors=(distro)
# Text Options
# Toggle bold text
#
# Default: 'on'
# Values: 'on', 'off'
# Flag: --bold
bold="on"
# Enable/Disable Underline
#
# Default: 'on'
# Values: 'on', 'off'
# Flag: --underline
underline_enabled="on"
# Underline character
#
# Default: '-'
# Values: 'string'
# Flag: --underline_char
underline_char="-"
# Info Separator
# Replace the default separator with the specified string.
#
# Default: ':'
# Flag: --separator
#
# Example:
# separator="->": 'Shell-> bash'
# separator=" =": 'WM = dwm'
separator=":"
# Color Blocks
# Color block range
# The range of colors to print.
#
# Default: '0', '15'
# Values: 'num'
# Flag: --block_range
#
# Example:
#
# Display colors 0-7 in the blocks. (8 colors)
# neofetch --block_range 0 7
#
# Display colors 0-15 in the blocks. (16 colors)
# neofetch --block_range 0 15
block_range=(0 15)
# Toggle color blocks
#
# Default: 'on'
# Values: 'on', 'off'
# Flag: --color_blocks
color_blocks="on"
# Color block width in spaces
#
# Default: '3'
# Values: 'num'
# Flag: --block_width
block_width=3
# Color block height in lines
#
# Default: '1'
# Values: 'num'
# Flag: --block_height
block_height=1
# Color Alignment
#
# Default: 'auto'
# Values: 'auto', 'num'
# Flag: --col_offset
#
# Number specifies how far from the left side of the terminal (in spaces) to
# begin printing the columns, in case you want to e.g. center them under your
# text.
# Example:
# col_offset="auto" - Default behavior of neofetch
# col_offset=7 - Leave 7 spaces then print the colors
col_offset="auto"
# Progress Bars
# Bar characters
#
# Default: '-', '='
# Values: 'string', 'string'
# Flag: --bar_char
#
# Example:
# neofetch --bar_char 'elapsed' 'total'
# neofetch --bar_char '-' '='
bar_char_elapsed="-"
bar_char_total="="
# Toggle Bar border
#
# Default: 'on'
# Values: 'on', 'off'
# Flag: --bar_border
bar_border="on"
# Progress bar length in spaces
# Number of chars long to make the progress bars.
#
# Default: '15'
# Values: 'num'
# Flag: --bar_length
bar_length=15
# Progress bar colors
# When set to distro, uses your distro's logo colors.
#
# Default: 'distro', 'distro'
# Values: 'distro', 'num'
# Flag: --bar_colors
#
# Example:
# neofetch --bar_colors 3 4
# neofetch --bar_colors distro 5
bar_color_elapsed="distro"
bar_color_total="distro"
# Info display
# Display a bar with the info.
#
# Default: 'off'
# Values: 'bar', 'infobar', 'barinfo', 'off'
# Flags: --cpu_display
# --memory_display
# --battery_display
# --disk_display
#
# Example:
# bar: '[---=======]'
# infobar: 'info [---=======]'
# barinfo: '[---=======] info'
# off: 'info'
cpu_display="off"
memory_display="off"
battery_display="off"
disk_display="off"
# Backend Settings
# Image backend.
#
# Default: 'ascii'
# Values: 'ascii', 'caca', 'chafa', 'jp2a', 'iterm2', 'off',
# 'pot', 'termpix', 'pixterm', 'tycat', 'w3m', 'kitty'
# Flag: --backend
image_backend="ascii"
# Image Source
#
# Which image or ascii file to display.
#
# Default: 'auto'
# Values: 'auto', 'ascii', 'wallpaper', '/path/to/img', '/path/to/ascii', '/path/to/dir/'
# 'command output (neofetch --ascii "$(fortune | cowsay -W 30)")'
# Flag: --source
#
# NOTE: 'auto' will pick the best image source for whatever image backend is used.
# In ascii mode, distro ascii art will be used and in an image mode, your
# wallpaper will be used.
image_source="auto"
# Ascii Options
# Ascii distro
# Which distro's ascii art to display.
#
# Default: 'auto'
# Values: 'auto', 'distro_name'
# Flag: --ascii_distro
# NOTE: AIX, Alpine, Anarchy, Android, Antergos, antiX, "AOSC OS",
# "AOSC OS/Retro", Apricity, ArcoLinux, ArchBox, ARCHlabs,
# ArchStrike, XFerience, ArchMerge, Arch, Artix, Arya, Bedrock,
# Bitrig, BlackArch, BLAG, BlankOn, BlueLight, bonsai, BSD,
# BunsenLabs, Calculate, Carbs, CentOS, Chakra, ChaletOS,
# Chapeau, Chrom*, Cleanjaro, ClearOS, Clear_Linux, Clover,
# Condres, Container_Linux, CRUX, Cucumber, Debian, Deepin,
# DesaOS, Devuan, DracOS, DarkOs, DragonFly, Drauger, Elementary,
# EndeavourOS, Endless, EuroLinux, Exherbo, Fedora, Feren, FreeBSD,
# FreeMiNT, Frugalware, Funtoo, GalliumOS, Garuda, Gentoo, Pentoo,
# gNewSense, GNOME, GNU, GoboLinux, Grombyang, Guix, Haiku, Huayra,
# Hyperbola, janus, Kali, KaOS, KDE_neon, Kibojoe, Kogaion,
# Korora, KSLinux, Kubuntu, LEDE, LFS, Linux_Lite,
# LMDE, Lubuntu, Lunar, macos, Mageia, MagpieOS, Mandriva,
# Manjaro, Maui, Mer, Minix, LinuxMint, MX_Linux, Namib,
# Neptune, NetBSD, Netrunner, Nitrux, NixOS, Nurunner,
# NuTyX, OBRevenge, OpenBSD, openEuler, OpenIndiana, openmamba,
# OpenMandriva, OpenStage, OpenWrt, osmc, Oracle, OS Elbrus, PacBSD,
# Parabola, Pardus, Parrot, Parsix, TrueOS, PCLinuxOS, Peppermint,
# popos, Porteus, PostMarketOS, Proxmox, Puppy, PureOS, Qubes, Radix,
# Raspbian, Reborn_OS, Redstar, Redcore, Redhat, Refracted_Devuan,
# Regata, Rosa, sabotage, Sabayon, Sailfish, SalentOS, Scientific,
# Septor, SereneLinux, SharkLinux, Siduction, Slackware, SliTaz,
# SmartOS, Solus, Source_Mage, Sparky, Star, SteamOS, SunOS,
# openSUSE_Leap, openSUSE_Tumbleweed, openSUSE, SwagArch, Tails,
# Trisquel, Ubuntu-Budgie, Ubuntu-GNOME, Ubuntu-MATE, Ubuntu-Studio,
# Ubuntu, Venom, Void, Obarun, windows10, Windows7, Xubuntu, Zorin,
# and IRIX have ascii logos
# NOTE: Arch, Ubuntu, Redhat, and Dragonfly have 'old' logo variants.
# Use '{distro name}_old' to use the old logos.
# NOTE: Ubuntu has flavor variants.
# Change this to Lubuntu, Kubuntu, Xubuntu, Ubuntu-GNOME,
# Ubuntu-Studio, Ubuntu-Mate or Ubuntu-Budgie to use the flavors.
# NOTE: Arcolinux, Dragonfly, Fedora, Alpine, Arch, Ubuntu,
# CRUX, Debian, Gentoo, FreeBSD, Mac, NixOS, OpenBSD, android,
# Antrix, CentOS, Cleanjaro, ElementaryOS, GUIX, Hyperbola,
# Manjaro, MXLinux, NetBSD, Parabola, POP_OS, PureOS,
# Slackware, SunOS, LinuxLite, OpenSUSE, Raspbian,
# postmarketOS, and Void have a smaller logo variant.
# Use '{distro name}_small' to use the small variants.
ascii_distro="GNU"
# Ascii Colors
#
# Default: 'distro'
# Values: 'distro', 'num' 'num' 'num' 'num' 'num' 'num'
# Flag: --ascii_colors
#
# Example:
# ascii_colors=(distro) - Ascii is colored based on Distro colors.
# ascii_colors=(4 6 1 8 8 6) - Ascii is colored using these colors.
ascii_colors=(distro)
# Bold ascii logo
# Whether or not to bold the ascii logo.
#
# Default: 'on'
# Values: 'on', 'off'
# Flag: --ascii_bold
ascii_bold="on"
# Image Options
# Image loop
# Setting this to on will make neofetch redraw the image constantly until
# Ctrl+C is pressed. This fixes display issues in some terminal emulators.
#
# Default: 'off'
# Values: 'on', 'off'
# Flag: --loop
image_loop="off"
# Thumbnail directory
#
# Default: '~/.cache/thumbnails/neofetch'
# Values: 'dir'
thumbnail_dir="${XDG_CACHE_HOME:-${HOME}/.cache}/thumbnails/neofetch"
# Crop mode
#
# Default: 'normal'
# Values: 'normal', 'fit', 'fill'
# Flag: --crop_mode
#
# See this wiki page to learn about the fit and fill options.
# https://github.com/dylanaraps/neofetch/wiki/What-is-Waifu-Crop%3F
crop_mode="normal"
# Crop offset
# Note: Only affects 'normal' crop mode.
#
# Default: 'center'
# Values: 'northwest', 'north', 'northeast', 'west', 'center'
# 'east', 'southwest', 'south', 'southeast'
# Flag: --crop_offset
crop_offset="center"
# Image size
# The image is half the terminal width by default.
#
# Default: 'auto'
# Values: 'auto', '00px', '00%', 'none'
# Flags: --image_size
# --size
image_size="auto"
# Gap between image and text
#
# Default: '3'
# Values: 'num', '-num'
# Flag: --gap
gap=3
# Image offsets
# Only works with the w3m backend.
#
# Default: '0'
# Values: 'px'
# Flags: --xoffset
# --yoffset
yoffset=0
xoffset=0
# Image background color
# Only works with the w3m backend.
#
# Default: ''
# Values: 'color', 'blue'
# Flag: --bg_color
background_color=
# Misc Options
# Stdout mode
# Turn off all colors and disables image backend (ASCII/Image).
# Useful for piping into another command.
# Default: 'off'
# Values: 'on', 'off'
stdout="off"

140
nix/hosts/dots/nvim/init.lua Executable file
View file

@ -0,0 +1,140 @@
-- ===================================
-- | General Neovim Configuration |
-- ===================================
-- I won't lie to you, I vibecoded the boilerplate for this stuff.
-- Aside from Emacs, I don't really like having to configure my editors
-- very much. Basic understanding of the config is all I really prioritize.
vim.opt.number = true -- Show line numbers
vim.opt.relativenumber = true -- Show relative line numbers
vim.opt.tabstop = 2 -- A tab is 2 spaces
vim.opt.shiftwidth = 2 -- Indent is 2 spaces
vim.opt.expandtab = true -- Use spaces instead of tabs
vim.opt.termguicolors = true -- Enable terminal colors
vim.opt.scrolloff = 8 -- Lines above/below cursor
vim.opt.signcolumn = "yes" -- Always show the sign column
-- Set the leader key to space. This is a crucial step for custom mappings.
vim.g.mapleader = " "
-- ====================================
-- | Plugin Management with lazy.nvim |
-- ====================================
-- The configuration below bootstraps lazy.nvim if it's not already installed.
local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim"
if not vim.loop.fs_stat(lazypath) then
vim.fn.system({
"git", "clone", "--filter=blob:none",
"https://github.com/folke/lazy.nvim.git", lazypath
})
end
vim.opt.rtp:prepend(lazypath)
-- Setup the plugins you need.
require("lazy").setup({
-- For background transparency
{ 'xiyaowong/transparent.nvim' },
-- === The colorscheme plugin is specified here. ===
-- Gruvbox theme plugin. It will be automatically installed by lazy.nvim.
{ 'ellisonleao/gruvbox.nvim', config = function()
-- Ensure the background is set to 'dark' for the gruvbox colorscheme.
vim.o.background = 'dark'
-- Load the colorscheme.
vim.cmd.colorscheme("gruvbox")
end },
-- Treesitter plugin for syntax highlighting.
{ "nvim-treesitter/nvim-treesitter", build = ":TSUpdate" },
-- Autocomplete plugins
{ "hrsh7th/nvim-cmp" },
{ "hrsh7th/cmp-nvim-lsp" },
{ "L3MON4D3/LuaSnip" },
{ "neovim/nvim-lspconfig" },
-- Plugin to automatically close paired characters like (), {}, [], and ""
{ 'echasnovski/mini.pairs' },
-- File tree and icon plugins
{
'nvim-tree/nvim-tree.lua',
version = '*',
lazy = false,
dependencies = {
'nvim-tree/nvim-web-devicons',
},
config = function()
-- The setup call for the nvim-tree plugin.
require('nvim-tree').setup {}
end
},
})
-- Transparent configuration
require('transparent').setup({
enable = true, -- boolean: enable transparent
extra_groups = { -- table: additional groups to clear
'Normal', 'NormalNC', 'Comment', 'Constant', 'Identifier',
'Statement', 'PreProc', 'Type', 'Special', 'Underlined',
'Todo', 'String', 'Function', 'Conditional', 'Repeat',
'Operator', 'Structure', 'LineNr', 'SignColumn', 'EndOfBuffer'
},
})
-- Treesitter configuration.
require("nvim-treesitter.configs").setup({
highlight = { enable = true },
-- You can specify languages to install with `ensure_installed`.
-- e.g., ensure_installed = { "lua", "python", "javascript" },
})
-- Autocomplete (cmp) configuration.
local cmp = require("cmp")
cmp.setup({
snippet = {
expand = function(args) require("luasnip").lsp_expand(args.body) end,
},
mapping = cmp.mapping.preset.insert({
["<Tab>"] = cmp.mapping.select_next_item(),
["<S-Tab>"] = cmp.mapping.select_prev_item(),
["<CR>"] = cmp.mapping.confirm({ select = true }),
}),
sources = {
{ name = "nvim_lsp" },
},
})
-- Mini.pairs configuration.
-- This simple setup is all that's needed for the basic functionality.
require('mini.pairs').setup({})
-- ===================================
-- | Custom Keymaps |
-- ===================================
-- Keymaps are custom commands mapped to a specific key combination.
-- The "<leader>" prefix will be replaced with your leader key, which is "space".
-- Split creation keymaps
vim.keymap.set('n', '<leader>sv', ':vsplit<CR>', { desc = 'Create a vertical split' })
vim.keymap.set('n', '<leader>ss', ':split<CR>', { desc = 'Create a horizontal split' })
-- Buffer navigation
-- <leader>bh/j/k/l to navigate between buffers
vim.keymap.set('n', '<leader>bh', ':bprev<CR>', { desc = 'Go to previous buffer' })
vim.keymap.set('n', '<leader>bl', ':bnext<CR>', { desc = 'Go to next buffer' })
-- The following mappings are less common, but fulfill your request.
vim.keymap.set('n', '<leader>bj', ':bnext<CR>', { desc = 'Go to next buffer' })
vim.keymap.set('n', '<leader>bk', ':bprev<CR>', { desc = 'Go to previous buffer' })
-- Split navigation
-- <leader>sh/j/k/l to move between splits
vim.keymap.set('n', '<leader>sh', '<C-w>h', { desc = 'Move to left split' })
vim.keymap.set('n', '<leader>sj', '<C-w>j', { desc = 'Move to split below' })
vim.keymap.set('n', '<leader>sk', '<C-w>k', { desc = 'Move to split above' })
vim.keymap.set('n', '<leader>sl', '<C-w>l', { desc = 'Move to right split' })
-- Normal mode keymaps
-- Save the current file.
vim.keymap.set('n', '<leader>w', ':w<CR>', { desc = 'Save file' })
-- Force quit the current window without saving.
vim.keymap.set('n', '<leader>q', ':q!<CR>', { desc = 'Force quit window' })
-- Save and quit.
vim.keymap.set('n', '<leader>x', ':wq<CR>', { desc = 'Save and quit' })
-- Save all open buffers.
vim.keymap.set('n', '<leader>wa', ':wa<CR>', { desc = 'Save all buffers' })
-- Close all windows except the current one.
vim.keymap.set('n', '<leader>o', ':only<CR>', { desc = 'Close all other windows' })
-- Toggle the file tree.
vim.keymap.set('n', '<leader>e', ':NvimTreeToggle<CR>', { desc = 'Toggle file tree' })
-- Select the entire file content.
vim.keymap.set('n', '<leader>a', 'ggVG', { desc = 'Select entire file' })
-- Various commands to compile different file types.
-- Groff => PDF
vim.keymap.set('n', '<leader>cg', ':!groff -ms -e %:t -T pdf > %:r.pdf<CR>', { desc = 'Compile Groff file to PDF' })
-- Typst => PDF
vim.keymap.set('n', '<leader>ct', ':!typst compile %:t<CR>', { desc = 'Compile Typst file to PDF'} )
-- Keybinding to toggle transparency
vim.api.nvim_set_keymap('n', '<leader>tt', ':TransparentToggle<CR>', { noremap = true, silent = true })

250
nix/hosts/dots/waybar/config Executable file
View file

@ -0,0 +1,250 @@
[{
"height": 40,
"spacing": 5,
"modules-left": [
"group/Utilities",
"group/workspaces",
"mpris"
],
"modules-center": [
"group/windows"
],
"modules-right": [
"group/cpuram",
"group/system"
],
"custom/openbracket": {
"format": "[",
"tooltip": false
},
"custom/closebracket": {
"format": "]",
"tooltip": false
},
"custom/split": {
"format": "|",
"tooltip": false
},
"group/Utilities":{
"orientation": "horizontal",
"modules":[
"custom/openbracket",
"idle_inhibitor",
"custom/split",
"custom/closebracket"
]
},
"group/workspaces":{
"orientation": "horizontal",
"modules":[
"hyprland/workspaces",
]
},
"hyprland/workspaces": {
"all-outputs": true,
"warp-on-scroll": false,
"enable-bar-scroll": true,
"disable-scroll-wraparound": true,
"active-only": false,
"format": "{icon}",
"format-icons": {
"1": "I",
"2": "II",
"3": "III",
"4": "IV",
"5": "V",
"6": "VI",
"7": "VII",
"8": "VIII",
"9": "IX",
"10": "X",
"default": "•"
}
},
"mpris": {
"format": "[  {status_icon} | {dynamic} ]",
"interval": 1,
"dynamic-len": 40,
"status-icons": {
"playing": "▶",
"paused": "⏸",
"stopped": ""
},
"dynamic-order": ["artist"]
},
"group/windows": {
"orientation":"horizontal",
"modules":[
"custom/openbracket",
"hyprland/window",
"custom/closebracket"
]
},
"hyprland/window": {
"format": "{title}",
"max-length": 40,
"min-length": 20,
"all-outputs": true
},
"group/cpuram": {
"orientation": "horizontal",
"modules": [
"custom/openbracket",
"cpu",
"custom/split",
"memory",
"custom/closebracket"
]
},
"cpu": {
"format": "CPU:{usage}%",
"tooltip": false,
"interval": 2,
"on-click": "kitty -e btop",
},
"memory":{
"format": "RAM:{}%",
"tooltip": false,
"interval": 2,
"on-click": "kitty -e btop",
},
"group/brightvol": {
"orientation": "horizontal",
"modules": [
"custom/openbracket",
"backlight",
"custom/split",
"wireplumber",
"custom/closebracket"
]
},
"wireplumber": {
"scroll-step": 5,
"format": "{icon}{volume}%",
"format-bluetooth": "{icon}{volume}% ",
"format-bluetooth-muted": " {icon}",
"format-muted": "",
"format-icons": {
"headphone": "",
"hands-free": "",
"headset": "",
"phone": "",
"portable": "",
"car": "",
"default": [" :", " :", " :"]
},
"on-click": "wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle",
"on-click-right": "pavucontrol"
},
"backlight": {
"format": "{icon}:{percent}%",
"format-icons": ["", "", "🌙"],
"on-click": "~/.config/waybar/scripts/brightness_slider.sh"
},
"group/system": {
"orientation": "horizontal",
"modules": [
"custom/openbracket",
"clock",
"custom/split",
"network",
"custom/bluetooth",
"custom/clipboard",
"battery",
"custom/swaync",
"custom/closebracket"
]
},
"clock": {
"format": "{:%I:%M}",
"tooltip-format": "<big>{:%Y %B}</big>\n<tt><small>{calendar}</small></tt>",
"onclick" : "kalender"
},
"custom/clipboard": {
"format": "",
"tooltip": false,
"on-click": "~/.config/waybar/scripts/clipboard_menu.sh"
},
"battery": {
"states": {
"warning": 30,
"critical": 15
},
"format": "{icon} {capacity}%",
"format-full": "{icon} {capacity}%",
"format-charging": " {capacity}%",
"format-plugged": " {capacity}%",
"format-icons": ["", "", "", "", ""],
"on-click": "wlogout"
},
"idle_inhibitor": {
"format": "{icon}",
"format-icons": {
"activated": "",
"deactivated": ""
}
},
"custom/swaync": {
"format": "",
"exec": "swaync-client -swb",
"on-click": "swaync-client --toggle-panel",
"interval": 0
},
"network": {
"interface": "wlan0",
"format-wifi": "{icon}",
"format-ethernet": "󰈀 LAN",
"format-disconnected": "󰖪",
"tooltip-format": "{ipaddr}\n{ssid} ({signalStrength}%)",
"on-click": "kitty -e nmtui",
"format-icons": [ "󰤯", "󰤟", "󰤢", "󰤥", "󰤨" ]
},
"custom/bluetooth": {
"format": "{}",
"exec": "~/.config/waybar/scripts/bluetooth_status.sh",
"interval": 5,
"on-click": "blueman-manager"
},
"group/clock": {
"orientation": "horizontal",
"modules": [
"custom/openbracket",
"clock",
"custom/closebracket"
]
},
"custom/cava": {
"exec": "~/.config/waybar/scripts/cava_wrapper.sh",
"format": "♪ {}",
"restart-interval": 1,
"max-length": 50,
"on-click": "pkill cava"
},
"tray": {
"icon-size": 14,
"spacing": 10
},
"custom/notifications": {
"format": "",
"tooltip": false,
"on-click": "~/.config/waybar/scripts/notification_center.sh"
}
}]

193
nix/hosts/dots/waybar/style.css Executable file
View file

@ -0,0 +1,193 @@
/* colors defined at top for easy configuring */
@define-color background #2C2A24;
@define-color second-background #3A372F;
@define-color text #DDD5C4;
@define-color borders #A0907A;
@define-color focused #D08B57;
@define-color focused2 #BFAA80;
@define-color color1 #7699A3;
@define-color color2 #8D7AAE;
@define-color color3 #78997A;
@define-color urgent #B05A5A;
/* font declared */
* {
font-family: "Miracode";
font-size: 15px;
}
#custom-openbracket,
#custom-closebracket{
margin: 0 5px ;
}
/* idk what all this does */
window#waybar {
background-color: transparent;
border-bottom: 0;
color: @text;
transition: background-color 0.5s;
}
window#waybar.hidden {
opacity: 0.2;
}
window#waybar.empty #window {
background-color: transparent;
}
/* configuring the modules */
.modules-left {
margin: 10px 0 0 10px;
padding: 0 0 0 7px;
background-color: @background;
border: 2px solid @focused;
border-radius: 5px;
}
.modules-center {
margin: 10px 0 0 0;
padding: 0 10px 0 10px;
background-color: @background;
border: 2px solid @focused;
border-radius: 5px;
}
.modules-right {
margin: 10px 10px 0 0;
padding: 0 10px 0 10px;
background-color: @background;
border: 2px solid @focused;
border-radius: 5px;
}
/* whats this?? */
button {
border: none;
}
/* left island */
/* menu pannel */
#custom-arch,
#custom-powerprofile,
#custom-themeswitcher{
padding-right: 10px;
padding-left: 5px;
font-size: 15px;
border-radius: 8px;
}
#custom-arch:hover {
color: @color1;
}
#custom-powerprofile:hover{
color: @color1
}
#custom-themeswitcher:hover {
color: @color1;
}
/* workspace pannel */
#workspaces button {
padding: 0 2px;
background-color: transparent;
color: @text;
border-radius: 0;
}
#workspaces button:hover {
background-color: @second-background;
}
#workspaces button.active {
color: @focused2;
background-color: @second-background;
}
#workspaces button.urgent {
background-color: @urgent;
}
/* no idea what this does */
.modules-left > widget:first-child > #workspaces {
margin-left: 0;
}
.modules-right > widget:last-child > #workspaces {
margin-right: 0;
}
/* media player */
#mpris {
margin: 0 0 0 5px;
padding: 0 9px ;
background-color: @background;
color: @text;
}
#mpris.playing {
background-color: @color3;
border-radius: 2px;
color: @background;
}
/* center module */
#window{
padding: 0 5px;
}
/* Right Island */
/* module general styles */
#clock,
#battery,
#cpu,
#memory,
#custom-clipboard,
#custom-bluetooth,
#network {
padding: 0 10px ;
}
#clock:hover,
#battery:hover,
#custom-cpu:hover,
#custom-clipboard:hover,
#custom-bluetooth:hover,
#network:hover,
#idle_inhibitor:hover,
#custom-swaync:hover,
#backlight:hover,
#wireplumber:hover{
color: @color1;
}
#idle_inhibitor{
padding: 0 10px 0 0;
}
#custom-powerprofile{
padding: 0 8px 0 4px;
}
/* Remaining Modules */
#backlight,
#wireplumber{
padding: 0 5px;
}
#wireplumber.muted {
background-color: @color2;
}
#custom-swaync {
padding: 0 10px 0 5px;
font-size: 16px; /* same scale as other icons */
color: @text;
}
#battery.charging,
#battery.plugged {
background-color: @focused2 ;
color: @background;
}
#battery.critical:not(.charging) {
background-color: @urgent;
color: @text;
animation: blink 0.5s steps(12) infinite alternate;
}
@keyframes blink {
to {
background-color: @second-background;
color: @text;
}
}

153
nix/hosts/home.nix Executable file
View file

@ -0,0 +1,153 @@
{ config, pkgs, ... }:
{
home.username = "lunita";
home.homeDirectory = "/home/lunita";
home.stateVersion = "25.05";
xdg.userDirs = {
enable = true;
createDirectories = true;
};
gtk = {
enable = true;
colorScheme = "dark";
};
programs.zsh = {
enable = true;
syntaxHighlighting.enable = true;
shellAliases = {
c = "clear";
nf = "neofetch";
v = "nvim";
d = "cd ~/Documents";
D = "cd ~/Downloads";
dot = "cd ~/dotfiles";
g = "git";
};
initContent = ''
# '~' => goto base of user home directory
alias ~='cd ~'
# Vim keybinds
bindkey -v
# Preferred editor for local and remote sessions
if [[ -n $SSH_CONNECTION ]]; then
export EDITOR='vim'
else
export EDITOR='nvim'
fi
# Set TERM for Ghostty ssh workaround
if [[ "$TERM_PROGRAM" == "ghostty" ]]; then
export TERM=xterm-256color
fi
# Run Hyprland if applicable
if [[ "$(tty)" == "/dev/tty"* ]] && command -v Hyprland &> /dev/null; then
exec Hyprland
fi
'';
history.size = 10000;
oh-my-zsh = {
enable = true;
plugins = [ "git" ];
theme = "lambda";
};
};
programs.git = {
enable = true;
userName = "lulusilly";
userEmail = "lunita@puppygirl.onl";
aliases = {
ci = "commit -m";
co = "checkout";
s = "status";
pu = "push origin master";
po = "push origin main";
rmc = "rm -r --cached";
};
};
nixpkgs.config.allowUnfree = true;
# Librewolf comes with safe defaults already, so minimal changes are necessary.
programs.librewolf = {
enable = true;
settings = {
"webgl.disabled" = false;
# "privacy.clearOnShutdown.history" = false;
# "privacy.clearOnShutdown.cookies" = false;
"network.cookie.lifetimePolicy" = 0;
};
};
services.udiskie = {
enable = true;
settings = {
program_options = {
file_manager = "${pkgs.kdePackages.dolphin}/bin/dolphin";
};
};
};
home.packages = with pkgs; [
tree # Nice file tree views w/ permissions
linux-wifi-hotspot # For hotspotting while over ethernet
neofetch # Muh epic r1ce!!!
hyfetch # basically neofetch but with queer flags
htop # OG resource manager
btop # Pretty resource manager
imagemagick # For converting images into other fmts
sxiv # Minimal image viewer
mpv # Media player
zathura # PDF/CBZ/EPUB/DJVU reader
tmux # Tride and true terminal multiplexer
obsidian # For epic note taking (really just mediocre journaling)
keepassxc # Secure password manager
syncthing # File syncing
ghostty # Terminal emulator
irssi # Terminal IRC client
nyxt # Customizable browser
cmus # C Music Player (TUI)
deadbeef # Closest thing to foobar2000 native on Linux
nicotine-plus # FOSS client for SoulSeek
kdePackages.dolphin # GUI File Manager
# Fonts
nerd-fonts.jetbrains-mono
miracode
monocraft
];
fonts.fontconfig.enable = true;
home.file = {
# Ghostty
".config/ghostty/config" .source = dotfiles/ghostty/config;
# Neovim
".config/nvim/init.lua" .source = dotfiles/nvim/init.lua;
# Emacs
".emacs.d/init.el" .source = dotfiles/.emacs.d/init.el;
# MPV
".config/mpv/mpv.conf" .source = dotfiles/mpv/mpv.conf;
# Btop
".config/btop/btop.conf" .source = dotfiles/btop/btop.conf;
# Neofetch
".config/neofetch/config.conf" .source = dotfiles/neofetch/config.conf;
# Hyprland
".config/hypr/bg.jpg" .source = dotfiles/hypr/bg.jpg;
".config/hypr/hyprland.conf" .source = dotfiles/hypr/hyprland.conf;
".config/hypr/start.sh" .source = dotfiles/hypr/start.sh;
# Waybar
".config/waybar/config" .source = dotfiles/waybar/config;
".config/waybar/style.css" .source = dotfiles/waybar/style.css;
};
home.sessionVariables = {
EDITOR = "nvim";
};
programs.home-manager.enable = true;
}

View file

@ -0,0 +1,16 @@
{ config, pkgs, inputs, ... }:
{
imports =
[
./hardware-configuration.nix
../../modules/kanata.nix
../../modules/efi.nix
../../modules/laptop.nix
../../modules/hypr.nix
];
networking.hostName = "mecca";
system.stateVersion = "25.05";
}

View file

@ -0,0 +1,41 @@
# Do not modify this file! It was generated by nixos-generate-config
# and may be overwritten by future invocations. Please make changes
# to /etc/nixos/configuration.nix instead.
{ config, lib, pkgs, modulesPath, ... }:
{
imports =
[ (modulesPath + "/installer/scan/not-detected.nix")
];
boot.initrd.availableKernelModules = [ "xhci_pci" "ahci" "nvme" "usb_storage" "sd_mod" "rtsx_pci_sdmmc" ];
boot.initrd.kernelModules = [ ];
boot.kernelModules = [ "kvm-intel" ];
boot.extraModulePackages = [ ];
fileSystems."/" =
{ device = "/dev/disk/by-uuid/9c7f9128-0371-4b7b-b0fb-86aeabe0491a";
fsType = "ext4";
};
fileSystems."/boot" =
{ device = "/dev/disk/by-uuid/BE22-C08F";
fsType = "vfat";
options = [ "fmask=0077" "dmask=0077" ];
};
swapDevices =
[ { device = "/dev/disk/by-uuid/8380ab37-d79c-4b25-888b-d457596dcfae"; }
];
# Enables DHCP on each ethernet and wireless interface. In case of scripted networking
# (the default) this is the recommended approach. When using systemd-networkd it's
# still possible to use this option, but it's recommended to use it in conjunction
# with explicit per-interface declarations with `networking.interfaces.<interface>.useDHCP`.
networking.useDHCP = lib.mkDefault true;
# networking.interfaces.enp0s31f6.useDHCP = lib.mkDefault true;
# networking.interfaces.wlp2s0.useDHCP = lib.mkDefault true;
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
}

8
nix/modules/efi.nix Executable file
View file

@ -0,0 +1,8 @@
{ config, pkgs, inputs, ... }:
{
# SystemD-boot is good enough
boot.loader.systemd-boot.enable = true;
boot.loader.efi.canTouchEfiVariables = true;
systemd.tpm2.enable = false;
}

25
nix/modules/hypr.nix Executable file
View file

@ -0,0 +1,25 @@
{ config, pkgs, inputs, ... }:
{
# Hyprland looks nice so I'm using it
programs.hyprland = {
enable = true;
withUWSM = true;
xwayland.enable = true;
};
environment.sessionVariables.NIXOS_OZONE_WL = "1";
xdg.portal.enable = true;
xdg.portal.extraPortals = [ pkgs.xdg-desktop-portal-gtk ];
environment.systemPackages = with pkgs; [
waybar # Status bar
libnotify # Desktop notifications
swww # Wallpaper manager
brightnessctl # For laptop backlight brightness control
grim # screenshot utility
slurp # select utility
wl-clipboard # xclip alternative
rofi-wayland # Dmenu replacement for Wayland
ghostty # Terminal emulator
];
}

164
nix/modules/kanata/conf.kbd Executable file
View file

@ -0,0 +1,164 @@
#|
Kanata Config
○ Ergonomic (kinda?) 34-key QWERTY layout
○ GACS home-row mods
○ Layers for function, number, media, and symbol keys
○ Dedicated (and non-intrusive!) standard layout toggle for reliant tasks
○ Decently commented for beginners and seasoned veterans alike.
FEEL FREE TO FORK!!!
|#
(defcfg
concurrent-tap-hold yes
movemouse-smooth-diagonals yes
)
#|
Trying to be minimal in order to reduce constant editing
of layer keys, not to mention how ugly having a 60% layout
is when you have mapped keys in the grid.
|#
(defsrc
caps
q w e r t y u i o p
a s d f g h j k l scln
z x c v b n m , . /
lalt spc ralt
)
;; Variables for clean code
(defvar
tap-time 200
hold-time 250
chord-time 50
)
;; Bindings
(defalias
;; Normal keyboard layer for gaming/other normie usage
normie (layer-switch norm)
;; Key chord definitions
chw (chord ch w)
che (chord ch e)
chi (chord ch i)
cho (chord ch o)
chs (chord ch s)
chd (chord ch d)
chk (chord ch k)
chl (chord ch l)
ch_lalt (chord ch lalt)
ch_ralt (chord ch ralt)
;; Remap Caps to Escape/Nav layer
navlayer (layer-while-held nav)
caps (tap-hold $tap-time $hold-time (tap-dance 200 (esc caps)) @navlayer)
;; Home row mods
a (tap-hold $tap-time $hold-time a lmet)
s (tap-hold $tap-time $hold-time s lalt)
d (tap-hold $tap-time $hold-time d lctl)
f (tap-hold $tap-time $hold-time f lsft)
j (tap-hold $tap-time $hold-time j rsft)
k (tap-hold $tap-time $hold-time k lctl)
l (tap-hold $tap-time $hold-time l lalt)
scln (tap-hold $tap-time $hold-time scln rmet)
;; Numpad layer
numpad (layer-while-held num)
g (tap-hold $tap-time $hold-time g @numpad)
;; Function key layer
fnkeys (layer-while-held fn)
h (tap-hold $tap-time $hold-time h @fnkeys)
#|
Hyper key when V or M are held down to allow for either hand to
use hyper key for AHK/Raycast shortcuts.
|#
v (tap-hold $tap-time $hold-time v (multi lsft lctl lalt))
m (tap-hold $tap-time $hold-time m (multi lsft lctl lalt))
;; Holding Spacebar activates symbol layer
symbols (layer-while-held symbol)
spc (tap-hold $tap-time $hold-time spc @symbols)
;; Media layer when Z or / are held.
medialy (layer-while-held md)
z (tap-hold $tap-time $hold-time z @medialy)
/ (tap-hold $tap-time $hold-time / @medialy)
)
;; Chord definitions. Kind of weird to read as a layperson
;; so I provided sufficient comments for general understanding.
(defchords ch $chord-time
(w ) w ;; W => W
( e) e ;; E => E
(w e) ret ;; W + E => Enter
(i ) i ;; I => I
( o) o ;; O => O
(i o) bspc ;; I + O => Backspace
(s ) @s ;; S => S
( d) @d ;; D => D
(s d) tab ;; S + D => Tab
(k ) @k ;; K => K (See defalias)
( l) @l ;; L => L (See defalias)
(k l) esc ;; K + L => Escape
(lalt ) (tap-dance $tap-time ((multi lsft lctl lalt lmet) lalt)) ;; LAlt => Hyper Key, LAlt × 2 => LAlt
( ralt) (tap-dance $tap-time ((multi lsft lctl lalt lmet) lalt)) ;; RAlt => Hyper Key, RAlt × 2 => RAlt
#|
Put simply, the below line allows for toggling a no-bind
layer for when you may require a standard layout (such as
playing Street Fighter, Counter Strike, etc.) by pressing
both alt keys at the same time. You can toggle back to the
base layer by holding both alts at the same time, as to allow
for normal functionality when holding either key down for a shortcut.
|#
(lalt ralt) (tap-hold $tap-time $hold-time @normie (layer-switch base))
)
;; Base layer with all binds enabled
(deflayer base
@caps
q @chw @che r t y u @chi @cho p
@a @chs @chd @f @g @h @j @chk @chl @scln
@z x c @v b n @m , . @/
@ch_lalt @spc @ch_ralt
)
;; Navigation layer
(deflayer nav
_
mbck (movemouse-up 3 3) mfwd _ _ _ mlft mrgt pgup pgdn
(movemouse-left 3 3) (movemouse-down 3 3) (movemouse-right 3 3) _ home left down up right end
_ _ _ _ _ _ _ _ _ _
_ _ _
)
;; Numpad Layer
(deflayer num
_
_ _ _ _ _ _ 7 8 9 _
_ _ _ _ _ _ 4 5 6 0 _
_ _ _ _ _ 1 2 3 _
_ _ _
)
;; Function key layer
(deflayer fn
_
f1 f2 f3 f4 _ _ _ _ _ _
f5 f6 f7 f8 _ _ _ _ _ _ _
f9 f10 f11 f12 _ _ _ _ _
_ _ _
)
;; Symbol layer
(deflayer symbol
_
S-1 S-2 S-3 S-4 S-5 S-6 S-7 S-8 S-9 S-0
- S-= S-[ S-] [ ] S-` S-scln S-\ \
= _ _ ` _ S-- _ _ ' S-'
_ _ _
)
;; Aformentioned standard layer with combo binds for toggling back
;; to base layer.
(deflayer norm
esc
q w e r t y u i o p
a s d f g h j k l scln
z x c v b n m , . /
@ch_lalt spc @ch_ralt
)
;; Media layer
;; NOTE: On Windows the brdn and brup keys cause Kanata to crash for some reason as of kanata_gui 1.8.1
(deflayer md
_
_ _ _ _ _ _ _ _ _ _
prev pp next mute vold volu brdn brup ins del
_ _ _ _ _ _ _ _ _ _
_ _ _
)

32
nix/modules/kanata/kanata.nix Executable file
View file

@ -0,0 +1,32 @@
{ config, libs, pkgs, inputs, ... }:
{
# Kanata setup
# Mostly copied from https://dev.to/shanu-kumawat/how-to-set-up-kanata-on-nixos-a-step-by-step-guide-1jkc
boot.kernelModules = [ "uinput" ]; # Enable uinput kernel module
hardware.uinput.enable = true; # Enable uinput
# Set up udev rules for uinput
services.udev.extraRules = ''
KERNEL=="uinput", MODE="0660", GROUP="uinput", OPTIONS+="static_node=uinput"
'';
users.groups.uinput = { }; # ensure uinput group exists
# Add Kanata service user to necessary groups
systemd.services.kanata-internalKeyboard.serviceConfig = {
SupplementaryGroups = [
"input"
"uinput"
];
};
# Kanata configuration
services.kanata = {
enable = true;
keyboards = {
internalKeyboard = {
devices = [
"/dev/input/by-path/platform-i8042-serio-0-event-kbd"
];
configFile = ./conf.kbd;
};
};
};
}

36
nix/modules/laptop.nix Executable file
View file

@ -0,0 +1,36 @@
{ config, lib, pkgs, inputs, ...}:
{
services.libinput.enable = true; # for laptop touchpad
# Laptop battery optimizations
services.tlp = {
enable = true;
settings = {
CPU_SCALING_GOVERNOR_ON_AC = "performance";
CPU_SCALING_GOVERNOR_ON_BAT = "powersave";
CPU_ENERGY_PERF_POLICY_ON_AC = "performance";
CPU_ENERGY_PERF_POLICY_ON_BAT = "power";
CPU_MIN_PERF_ON_AC = 0;
CPU_MAX_PERF_ON_AC = 100;
CPU_MIN_PERF_ON_BAT = 0;
CPU_MAX_PERF_ON_BAT = 20;
START_CHARGE_THRESH_BAT0 = 40; # 40 and below it starts to charge
STOP_CHARGE_THRESH_BAT0 = 80; # 80 and above it stops charging
};
};
services.auto-cpufreq.enable = true;
services.auto-cpufreq.settings = {
battery = {
governor = "powersave";
turbo = "never";
};
charger = {
governor = "performance";
turbo = "auto";
};
};
powerManagement.powertop.enable = true;
}

11
nix/modules/syncthing.nix Executable file
View file

@ -0,0 +1,11 @@
{ config, pkgs, inputs, ... }:
{
services.syncthing = {
enable = true;
user = "lunita";
group = "syncthing";
dataDir = "/home/lunita/Sync";
configDir = "/home/lunita/.config/syncthing";
};
}