442 lines
10 KiB
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;
|
|
}
|