nixos-config/config/users/alex/default.nix

442 lines
10 KiB
Nix

{ config, pkgs, user, firefox-addons, ... }:
{
# Home Manager needs a bit of information about you and the
# paths it should manage.
home.username = user;
home.homeDirectory = "/home/${user}";
# Packages that should be installed to the user profile.
home.packages = with pkgs; [
aseprite
audacity
blender
darktable
digikam
discord
drawio
exiftool # For digikam
famistudio
digikam
firefox
flameshot
gimp-with-plugins
gnucash
godot_4
grafx2
jellyfin-media-player
keepassxc
krita
rawtherapee
libreoffice
lmms
lutris
moonlight-qt
nextcloud-client
nixpkgs-fmt
nodejs_20
obsidian
pavucontrol
picard
rawtherapee
rofi
spotify
sqlitebrowser
steam
syncthing
ventoy-full
vlc
winetricks
wineWowPackages.unstableFull
yt-dlp
];
imports = [
../../apps/firefox.nix
../../apps/vscode.nix
];
# WM/DE config
gtk = {
enable = true;
font.name = "Victor Mono SemiBold 12";
theme = {
name = "SolArc-Dark";
package = pkgs.solarc-gtk-theme;
};
};
xsession = {
enable = true;
windowManager.bspwm = {
enable = true;
settings = {
border_width = 10;
focus_follows_pointer = true;
};
extraConfig = ''
bspc monitor DP-2 -d I II III IV V
bspc monitor HDMI-1 -d VI VII VIII IX X
# Set mouse 1 to move floating windows:
bspc config pointer_action1 move
# Mouse 2 button resizes the window by side:
bspc config pointer_action2 resize_side
# Mouse 3 button (right mouse) resize by corner:
bspc config pointer_action2 resize_corner
'';
startupPrograms = [ "picom" "polybar primary" "polybar secondary" ];
};
};
services.sxhkd =
{
enable = true;
keybindings = {
"super + Return" = "kitty";
#
# bspwm hotkeys
#
# quit/restart bspwm
"super + alt + {q,r}" =
"bspc {quit,wm -r}";
# close and kill
"super + {_,shift + }w" =
"bspc node -{c,k}";
#
# state/flags
#
# set the window state
"super + {t,shift + t,s,f}" =
"bspc node -t {tiled,pseudo_tiled,floating,fullscreen}";
# set the node flags
"super + ctrl + {m,x,y,z}" =
"bspc node -g {marked,locked,sticky,private}";
#
# focus/swap
#
# focus the node in the given direction
"super + {_,shift + }{h,j,k,l}" =
"bspc node -{f,s} {west,south,north,east}";
# focus the node for the given path jump
"super + {p,b,comma,period}" =
"bspc node -f @{parent,brother,first,second}";
# focus the next/previous window in the current desktop
"super + {_,shift + }c" = "bspc node -f {next,prev}.local.!hidden.window";
# focus the next/previous desktop in the current monitor
"super + bracket{left,right}" =
"bspc desktop -f {prev,next}.local";
# focus the last node/desktop
"super + {grave,Tab}" = "bspc {node,desktop} -f last";
# focus the older or newer node in the focus history
"super + {o,i}" = ''
bspc wm -h off; \
bspc node {older,newer} -f; \
bspc wm -h on
'';
# focus or send to the given desktop
"super + {_,shift + }{1-9,0}" =
"bspc {desktop -f,node -d} '^{1-9,10}'";
#
# move/resize
#
# expand a window by moving one of its side outward
"super + alt + {h,j,k,l}" =
" bspc node -z {left -20 0,bottom 0 20,top 0 -20,right 20 0}";
# contract a window by moving one of its side inward
"super + alt + shift + {h,j,k,l}" =
"bspc node -z {right -20 0,top 0 20,bottom 0 -20,left 20 0}";
# move a floating window
"super + {Left,Down,Up,Right}" =
" bspc node -v {-20 0,0 20,0 -20,20 0}";
"Super_L; @Super_L" = "rofi -show drun";
};
};
services.polybar = {
enable = true;
script = ""; # required but we start polybar via bspwm, so dont start it here.
config = rec {
colors = {
background = "#282A2E";
# background = "#ff00ff";
background-alt = "#373B41";
foreground = "#C5C8C6";
primary = "#F0C674";
secondary = "#8ABEB7";
alert = "#A54242";
disabled = "#707880";
};
common-bar = {
width = "100%";
height = "24pt";
radius = 10;
#;dpi = 96
background = colors.background;
foreground = colors.foreground;
line-size = "3pt";
border-size = "4pt";
border-color = "#00000000";
padding-left = 0;
padding-right = 1;
module-margin = 1;
separator = "|";
separator-foreground = colors.disabled;
font-0 = "monospace;2";
wm-restack = "bspwm";
cursor-click = "pointer";
cursor-scroll = "ns-resize";
enable-ipc = true;
};
"bar/primary" = common-bar // {
monitor = "DP-2";
modules-left = "xworkspaces xwindow";
modules-right = "filesystem memory cpu wlan date";
};
"bar/secondary" = common-bar // {
monitor = "HDMI-1";
modules-left = "xworkspaces";
modules-center = "date";
};
"module/xworkspaces" = {
type = "internal/xworkspaces";
group-by-monitor = true;
pin-workspaces = true;
label-active = "%name%";
label-active-background = colors.background-alt;
label-active-underline = colors.primary;
label-active-padding = 1;
label-occupied = "%name%";
label-occupied-padding = 1;
label-urgent = "%name%";
label-urgent-background = colors.alert;
label-urgent-padding = 1;
label-empty = "%name%";
label-empty-foreground = colors.disabled;
label-empty-padding = 1;
};
};
extraConfig = ''
[module/systray]
type = internal/tray
format-margin = 8pt
tray-spacing = 16pt
[module/xwindow]
type = internal/xwindow
label = %title:0:60:...%
[module/filesystem]
type = internal/fs
interval = 25
mount-0 = /
label-mounted = %{F#F0C674}%mountpoint%%{F-} %percentage_used%%
label-unmounted = %mountpoint% not mounted
label-unmounted-foreground = ''${colors.disabled}
[module/pulseaudio]
type = internal/pulseaudio
format-volume-prefix = "VOL "
format-volume-prefix-foreground = ''${colors.primary}
format-volume = <label-volume>
label-volume = %percentage%%
label-muted = muted
label-muted-foreground = ''${colors.disabled}
[module/xkeyboard]
type = internal/xkeyboard
blacklist-0 = num lock
label-layout = %layout%
label-layout-foreground = ''${colors.primary}
label-indicator-padding = 2
label-indicator-margin = 1
label-indicator-foreground = ''${colors.background}
label-indicator-background = ''${colors.secondary}
[module/memory]
type = internal/memory
interval = 2
format-prefix = "RAM "
format-prefix-foreground = ''${colors.primary}
label = %percentage_used:2%%
[module/cpu]
type = internal/cpu
interval = 2
format-prefix = "CPU "
format-prefix-foreground = ''${colors.primary}
label = %percentage:2%%
[network-base]
type = internal/network
interval = 5
format-connected = <label-connected>
format-disconnected = <label-disconnected>
label-disconnected = %{F#F0C674}%ifname%%{F#707880} disconnected
[module/wlan]
inherit = network-base
interface-type = wireless
label-connected = %{F#F0C674}%ifname%%{F-} %essid% %local_ip%
[module/eth]
inherit = network-base
interface-type = wired
label-connected = %{F#F0C674}%ifname%%{F-} %local_ip%
[module/date]
type = internal/date
interval = 1
date = %l:%M%P
date-alt = %Y-%m-%d %H:%M:%S
label = %date%
label-foreground = ''${colors.primary}
[settings]
screenchange-reload = true
pseudo-transparency = true
; vim:ft=dosini
'';
};
services.picom = {
enable = true;
backend = "glx";
activeOpacity = 1;
inactiveOpacity = 0.75;
shadow = true;
vSync = true;
settings = {
blur = {
method = "gaussian";
size = 50;
deviation = 10.0;
};
corner-radius = 15;
};
};
# User software configurations
programs = {
bash = {
enable = true;
bashrcExtra = ''
function nxr () {
set -u
local pkg="$1"
shift
nix-shell -p "$pkg" --run "$pkg $@"
set +u
}
'';
shellAliases = {
"git-override" = "git add . && git commit --amend --no-edit && git push --force-with-lease";
};
};
git = {
enable = true;
userEmail = "alexmat2on@protonmail.com";
userName = "alex";
ignores = [ "*~" ];
extraConfig = {
init.defaultBranch = "main";
};
};
kitty = {
enable = true;
# TODO figure out how to get atau-nixpkgs working from the flake with different systems
# background_image ${atau-nixpkgs.atau-wallpapers}/share/backgrounds/atau-wallpapers/aos1.png
extraConfig = ''
background_tint 0.2
background_image_layout centered
modify_font cell_width 110%
window_border_width 1
window_margin_width 10
window_padding_width 2
'';
theme = "Rosé Pine Dawn";
font.package = pkgs.victor-mono;
font.name = "Victor Mono";
font.size = 12;
};
mpv = {
enable = true;
scriptOpts = {
"ytdl_hook" = {
"ytdl_path" = "${pkgs.yt-dlp}/bin/yt-dlp";
};
};
};
};
# This value determines the Home Manager release that your
# configuration is compatible with. This helps avoid breakage
# when a new Home Manager release introduces backwards
# incompatible changes.
#
# You can update Home Manager without changing this value. See
# the Home Manager release notes for a list of state version
# changes in each release.
home.stateVersion = "23.05";
home.enableNixpkgsReleaseCheck = true;
# Let Home Manager install and manage itself.
programs.home-manager.enable = true;
}