huge change

This commit is contained in:
fwastring 2025-11-12 10:12:29 +01:00
parent c159d2f3e3
commit d86cc3c816
29 changed files with 1151 additions and 792 deletions

View file

@ -18,7 +18,10 @@
nix.nixPath = [ "/etc/nix/path" ];
users.defaultUserShell = pkgs.bash;
documentation.man.generateCaches = false;
programs.fish.enable = true;
programs.fish = {
enable = true;
};
programs.bash = {
interactiveShellInit = ''
if [[ $(${pkgs.procps}/bin/ps --no-header --pid=$PPID --format=comm) != "fish" && -z ''${BASH_EXECUTION_STRING} ]]
@ -58,7 +61,7 @@
fonts.packages = with pkgs; [
nerd-fonts.comic-shanns-mono
nerd-fonts.fira-code
garamond-libre
garamond-libre
];
i18n.defaultLocale = "en_US.UTF-8";

View file

@ -1,82 +1,113 @@
{ pkgs, ... }:
{
programs.fish = {
enable = true;
plugins = [
{
name = "z";
src = pkgs.fetchFromGitHub {
owner = "jethrokuan";
repo = "z";
rev = "e0e1b9dfdba362f8ab1ae8c1afc7ccf62b89f7eb";
sha256 = "0dbnir6jbwjpjalz14snzd3cgdysgcs3raznsijd6savad3qhijc";
};
}
{
name = "autopair";
src = pkgs.fishPlugins.autopair.src;
}
{
name = "foreign-env";
src = pkgs.fishPlugins.foreign-env.src;
}
{
name = "fzf";
src = pkgs.fishPlugins.fzf.src;
}
{
name = "done";
src = pkgs.fishPlugins.done.src;
}
{
name = "grc";
src = pkgs.fishPlugins.grc.src;
}
];
shellAbbrs = {
ls = "eza -l";
lg = "lazygit";
ka = "kubectl apply -f";
t = "timew";
todo = "jira issue list -a 'Fredrik Wastring' -s ~Done -s ~Closed -s ~Released --plain";
cam = "jira issue create && jira issue assign && jira issue move";
e = "kubectx";
s = {
setCursor = "%";
expansion = "cha https://search.wastring.com/search?q=%";
};
tw = {
setCursor = "%";
expansion = "typst watch % --open zathura /tmp/zathura.pdf";
};
c = {
setCursor = "%";
expansion = "ssh 'fw:%@gateway.internalifacts.se' -p 2222";
};
dl = {
setCursor = "&";
expansion = "yt-dlp -o \"~/videor/%(title)s - %(uploader)s\" \"&\"";
};
};
interactiveShellInit = ''
fish_vi_key_bindings
set fish_greeting
set FLAKE_DIR "/home/fw/nix"
set JIRA_API_TOKEN ATATT3xFfGF0_fkpGB1ne-QOSJzFVG0yH31j2CRtdNqbePCyEm9enpnA2uA3go75_GQwZPFX_IO9tf10ALJWvDLjsuHl8MSOUkNd703Vqr4uuGLAbHY73Z_b9fDJVrfodTrGAN9sZ5Sp75opCVkXB7MVXSAIvlWimRdwe-tqDPH4vhwY9Hqcs6M=0510D6CD
set -Ux FZF_CTRL_R_OPTS "--reverse"
set -Ux FZF_TMUX_OPTS "-p"
set -e GOROOT
set -e GOPATH
gh completion -s fish > ~/.config/fish/completions/gh.fish
set -gx PATH $PATH $HOME/.krew/bin
{ pkgs, lib, config, ... }:
# Mocha
set -Ux FZF_DEFAULT_OPTS "\
--color=bg+:#313244,bg:#1e1e2e,spinner:#f5e0dc,hl:#f38ba8 \
--color=fg:#cdd6f4,header:#f38ba8,info:#cba6f7,pointer:#f5e0dc \
--color=marker:#b4befe,fg+:#cdd6f4,prompt:#cba6f7,hl+:#f38ba8 \
--color=selected-bg:#45475a \
--multi"
'';
let
inherit (lib) concatStringsSep mkOption types;
mkFzfOptionsString = lines: concatStringsSep " " lines;
catppuccinFzfOptions = {
mocha = mkFzfOptionsString [
"--color=bg+:#313244,bg:#1e1e2e,spinner:#f5e0dc,hl:#f38ba8"
"--color=fg:#cdd6f4,header:#f38ba8,info:#cba6f7,pointer:#f5e0dc"
"--color=marker:#b4befe,fg+:#cdd6f4,prompt:#cba6f7,hl+:#f38ba8"
"--color=selected-bg:#45475a"
"--multi"
];
latte = mkFzfOptionsString [
"--color=bg+:#ccd0da,bg:#eff1f5,spinner:#dc8a78,hl:#d20f39"
"--color=fg:#4c4f69,header:#d20f39,info:#1e66f5,pointer:#dc8a78"
"--color=marker:#fe640b,fg+:#4c4f69,prompt:#1e66f5,hl+:#d20f39"
"--color=selected-bg:#acb0be"
"--multi"
];
};
in
{
options.fish = {
theme = mkOption {
type = types.enum (builtins.attrNames catppuccinFzfOptions);
default = "mocha";
description = "Catppuccin theme variant used for Fish integrations such as FZF.";
example = "latte";
};
};
config = {
programs.fish = {
enable = true;
plugins = [
{
name = "z";
src = pkgs.fetchFromGitHub {
owner = "jethrokuan";
repo = "z";
rev = "e0e1b9dfdba362f8ab1ae8c1afc7ccf62b89f7eb";
sha256 = "0dbnir6jbwjpjalz14snzd3cgdysgcs3raznsijd6savad3qhijc";
};
}
{
name = "autopair";
src = pkgs.fishPlugins.autopair.src;
}
{
name = "foreign-env";
src = pkgs.fishPlugins.foreign-env.src;
}
{
name = "fzf";
src = pkgs.fishPlugins.fzf.src;
}
{
name = "done";
src = pkgs.fishPlugins.done.src;
}
{
name = "grc";
src = pkgs.fishPlugins.grc.src;
}
];
shellAbbrs = {
ls = "eza -l";
lg = "lazygit";
ka = "kubectl apply -f";
t = "timew";
todo = "jira issue list -a 'Fredrik Wastring' -s ~Done -s ~Closed -s ~Released --plain";
cam = "jira issue create && jira issue assign && jira issue move";
e = "kubectx";
s = {
setCursor = "%";
expansion = "cha https://search.wastring.com/search?q=%";
};
tw = {
setCursor = "%";
expansion = "typst watch % --open zathura /tmp/zathura.pdf";
};
c = {
setCursor = "%";
expansion = "ssh 'fw:%@gateway.internalifacts.se' -p 2222";
};
dl = {
setCursor = "&";
expansion = "yt-dlp -o \"~/videor/%(title)s - %(uploader)s\" \"&\"";
};
};
interactiveShellInit =
let
fzfOpts = catppuccinFzfOptions.${config.fish.theme};
in ''
fish_vi_key_bindings
set fish_greeting
set FLAKE_DIR "/home/fw/nix"
set JIRA_API_TOKEN ATATT3xFfGF0_fkpGB1ne-QOSJzFVG0yH31j2CRtdNqbePCyEm9enpnA2uA3go75_GQwZPFX_IO9tf10ALJWvDLjsuHl8MSOUkNd703Vqr4uuGLAbHY73Z_b9fDJVrfodTrGAN9sZ5Sp75opCVkXB7MVXSAIvlWimRdwe-tqDPH4vhwY9Hqcs6M=0510D6CD
set -Ux FZF_CTRL_R_OPTS "--reverse"
set -Ux FZF_TMUX_OPTS "-p"
set -e GOROOT
set -e GOPATH
gh completion -s fish > ~/.config/fish/completions/gh.fish
set -gx PATH $PATH $HOME/.krew/bin
set -Ux FZF_DEFAULT_OPTS "${fzfOpts}"
'';
};
};
}

View file

@ -8,7 +8,7 @@
email = "fredrik@wastring.com";
};
pull = {
rebase = false;
rebase = true;
};
url."git@github.com:".insteadOf = "https://github.com/";
};

View file

@ -7,29 +7,30 @@
...
}:
{
imports = [
../moduler/tmux.nix
../moduler/fish.nix
../moduler/kitty.nix
../moduler/dunst.nix
../moduler/nixpkgs.nix
../moduler/firefox.nix
../moduler/zathura.nix
../moduler/lazygit.nix
../moduler/ssh.nix
../moduler/oh-my-posh.nix
../moduler/gtk.nix
# ../moduler/neovim.nix
../moduler/programs/k9s
];
imports = [
../moduler/tmux.nix
../moduler/fish.nix
../moduler/kitty.nix
../moduler/dunst.nix
../moduler/nixpkgs.nix
../moduler/firefox.nix
../moduler/zathura.nix
../moduler/lazygit.nix
../moduler/ssh.nix
../moduler/oh-my-posh.nix
../moduler/gtk.nix
# ../moduler/neovim.nix
../moduler/programs/k9s
];
programs.home-manager.enable = true;
programs.fish.enable = true;
home.username = "fw";
home.homeDirectory = "/home/fw";
programs.home-manager.enable = true;
programs.fish.enable = true;
home.stateVersion = "25.05";
home.username = "fw";
home.homeDirectory = "/home/fw";
systemd.user.startServices = "sd-switch";
home.stateVersion = "25.05";
systemd.user.startServices = "sd-switch";
}

View file

@ -8,309 +8,324 @@
...
}:
let
hyprlandPkg = inputs.hyprland.packages.${pkgs.stdenv.hostPlatform.system}.hyprland;
in
with lib;
{
environment.systemPackages = with pkgs; [
swww
swappy
ydotool
wl-clipboard
hyprpolkitagent
hyprland-qtutils
waypipe
wmenu
playerctl
];
options = {
hyprland = {
enable = mkEnableOption "enables hyprland";
theme = lib.mkOption {
type = lib.types.str;
default = "latte";
description = "the theme for hyprland";
};
};
};
config = mkIf config.hyprland.enable {
environment.systemPackages = with pkgs; [
swww
swappy
ydotool
wl-clipboard
hyprpolkitagent
hyprland-qtutils
waypipe
wmenu
playerctl
];
fonts.packages = with pkgs; [
font-awesome
];
fonts.packages = with pkgs; [
font-awesome
];
services = {
greetd = {
services.greetd = {
enable = true;
settings = {
default_session = {
command = "${pkgs.tuigreet}/bin/tuigreet --time --cmd hyprland";
user = "greeter";
settings = rec {
initial_session = {
command = "${pkgs.hyprland}/bin/Hyprland";
user = "fw";
};
default_session = initial_session;
};
};
};
nix.settings = {
substituters = [ "https://hyprland.cachix.org" ];
trusted-substituters = [ "https://hyprland.cachix.org" ];
trusted-public-keys = [ "hyprland.cachix.org-1:a7pgxzMz7+chwVL3/pzj6jIBMioiJM7ypFP8PwtkuGc=" ];
};
programs.hyprland = {
enable = true;
package = inputs.hyprland.packages.${pkgs.stdenv.hostPlatform.system}.hyprland;
portalPackage =
inputs.hyprland.packages.${pkgs.stdenv.hostPlatform.system}.xdg-desktop-portal-hyprland;
};
home-manager.users.fw =
{ pkgs, ... }:
{
programs = {
hyprlock = {
enable = true;
nix.settings = {
substituters = [ "https://hyprland.cachix.org" ];
trusted-substituters = [ "https://hyprland.cachix.org" ];
trusted-public-keys = [ "hyprland.cachix.org-1:a7pgxzMz7+chwVL3/pzj6jIBMioiJM7ypFP8PwtkuGc=" ];
};
programs.hyprland = {
enable = true;
package = inputs.hyprland.packages.${pkgs.stdenv.hostPlatform.system}.hyprland;
portalPackage =
inputs.hyprland.packages.${pkgs.stdenv.hostPlatform.system}.xdg-desktop-portal-hyprland;
};
home-manager.users.fw =
{ pkgs, ... }:
{
programs = {
hyprlock = {
enable = true;
};
rofi = {
enable = true;
font = lib.mkForce "FiraCode Nerd Font 18";
};
};
rofi = {
enable = true;
font = lib.mkForce "FiraCode Nerd Font 18";
};
};
services = {
cliphist = {
enable = true;
};
hypridle = {
enable = true;
settings = {
general = {
after_sleep_cmd = "hyprctl dispatch dpms on";
ignore_dbus_inhibit = false;
lock_cmd = "hyprlock";
services = {
cliphist = {
enable = true;
};
hypridle = {
enable = true;
settings = {
general = {
after_sleep_cmd = "hyprctl dispatch dpms on";
ignore_dbus_inhibit = false;
lock_cmd = "hyprlock";
};
listener = [
{
timeout = 900;
on-timeout = "hyprlock";
}
{
timeout = 1200;
on-timeout = "hyprctl dispatch dpms off";
on-resume = "hyprctl dispatch dpms on";
}
];
};
};
hyprpaper = {
enable = true;
settings = {
ipc = "on";
splash = false;
splash_offset = 2.0;
listener = [
{
timeout = 900;
on-timeout = "hyprlock";
}
{
timeout = 1200;
on-timeout = "hyprctl dispatch dpms off";
on-resume = "hyprctl dispatch dpms on";
}
];
preload = [
"/home/fw/nix/wallpapers/nix-wallpaper-nineish-catppuccin-${config.hyprland.theme}.png"
"/home/fw/nix/wallpapers/tux.catppuccin-${config.hyprland.theme}.jpg"
];
wallpaper = [
",/home/fw/nix/wallpapers/nix-wallpaper-nineish-catppuccin-${config.hyprland.theme}.png"
];
};
};
};
hyprpaper = {
wayland.windowManager.hyprland = {
enable = true;
settings = {
ipc = "on";
splash = false;
splash_offset = 2.0;
preload = [ "/home/fw/nix/wallpapers/nix-wallpaper-nineish-catppuccin-mocha.png" "/home/fw/nix/wallpapers/nix-wallpaper-nineish-catppuccin-latte.png" ];
wallpaper = [
"DP-1,/home/fw/nix/wallpapers/nix-wallpaper-nineish-catppuccin-latte.png"
"eDP-1,/home/fw/nix/wallpapers/nix-wallpaper-nineish-catppuccin-latte.png"
];
};
};
};
wayland.windowManager.hyprland = {
enable = true;
xwayland = {
enable = true;
};
settings = {
"$terminal" = "kitty";
"$mod" = "ALT";
monitor = [
"desc: ASUSTek COMPUTER INC ASUS PA279CV S4LMTF159462 (DP-1), 3840x2160@60, 0x0, 1.5, transform, 1"
"desc: ASUSTek COMPUTER INC VG279 JBLMQS021792 (DP-1), 1920x1080@144, 0x0, 1"
"eDP-1, 1920x1080@60, 0x0, 1, transform, 0"
",prefered,auto,1"
];
xwayland = {
force_zero_scaling = true;
enable = true;
};
general = {
gaps_in = 7;
gaps_out = 14;
border_size = 2;
layout = "dwindle";
allow_tearing = true;
};
settings = {
"$terminal" = "kitty";
"$mod" = "ALT";
input = {
kb_layout = "se";
kb_options = [
"caps:escape"
monitor = [
"desc: ASUSTek COMPUTER INC ASUS PA279CV S4LMTF159462 (DP-1), 3840x2160@60, 0x0, 1.5, transform, 0"
"desc: ASUSTek COMPUTER INC VG279 JBLMQS021792 (DP-1), 1920x1080@144, 0x0, 1"
"eDP-1, 1920x1080@60, 0x0, 1, transform, 0"
",prefered,auto,1"
];
follow_mouse = true;
touchpad = {
natural_scroll = true;
xwayland = {
force_zero_scaling = true;
};
accel_profile = "flat";
sensitivity = 0;
};
decoration = {
rounding = 10;
active_opacity = 0.8;
inactive_opacity = 0.7;
fullscreen_opacity = 0.9;
general = {
gaps_in = 7;
gaps_out = 14;
border_size = 2;
layout = "dwindle";
allow_tearing = true;
};
blur = {
input = {
kb_layout = "se";
kb_options = [
"caps:escape"
];
follow_mouse = true;
touchpad = {
natural_scroll = true;
};
accel_profile = "flat";
sensitivity = 0;
};
decoration = {
rounding = 10;
active_opacity = 0.9;
inactive_opacity = 0.8;
fullscreen_opacity = 0.9;
blur = {
enabled = true;
xray = true;
special = false;
new_optimizations = true;
size = 14;
passes = 4;
brightness = 1;
noise = 0.01;
contrast = 1;
popups = true;
popups_ignorealpha = 0.6;
ignore_opacity = false;
};
};
animations = {
enabled = true;
xray = true;
special = false;
new_optimizations = true;
size = 14;
passes = 4;
brightness = 1;
noise = 0.01;
contrast = 1;
popups = true;
popups_ignorealpha = 0.6;
ignore_opacity = false;
bezier = [
"easeOutQuint,0.23,1,0.32,1"
"easeInOutCubic,0.65,0.05,0.36,1"
"linear,0,0,1,1"
"almostLinear,0.5,0.5,0.75,1.0#fffff"
"quick,0.15,0,0.1,1"
];
animation = [
"global, 1, 10, default"
"border, 1, 5.39, easeOutQuint"
"windows, 1, 4.79, easeOutQuint"
"windowsIn, 1, 4.1, easeOutQuint, popin 87%"
"windowsOut, 1, 1.49, linear, popin 87%"
"fadeIn, 1, 1.73, almostLinear"
"fadeOut, 1, 1.46, almostLinear"
"fade, 1, 3.03, quick"
"layers, 1, 3.81, easeOutQuint"
"layersIn, 1, 4, easeOutQuint, fade"
"layersOut, 1, 1.5, linear, fade"
"fadeLayersIn, 1, 1.79, almostLinear"
"fadeLayersOut, 1, 1.39, almostLinear"
"workspaces, 1, 1.94, almostLinear, fade"
"workspacesIn, 1, 1.21, almostLinear, fade"
"workspacesOut, 1, 1.94, almostLinear, fade"
];
};
};
animations = {
enabled = true;
bezier = [
"easeOutQuint,0.23,1,0.32,1"
"easeInOutCubic,0.65,0.05,0.36,1"
"linear,0,0,1,1"
"almostLinear,0.5,0.5,0.75,1.0#fffff"
"quick,0.15,0,0.1,1"
cursor = {
enable_hyprcursor = true;
};
dwindle = {
pseudotile = true;
preserve_split = true;
smart_split = false;
smart_resizing = false;
};
misc = {
disable_hyprland_logo = true;
disable_splash_rendering = true;
enable_swallow = true;
swallow_regex = "^(kitty)$";
};
bind = [
# General
"$mod, return, exec, $terminal"
"$mod SHIFT, q, killactive"
"$mod SHIFT, e, exit"
"$mod SHIFT, d, exec, /home/fw/scripts/dmenu_sys"
"$mod SHIFT, x, exec, ${pkgs.hyprlock}/bin/hyprlock"
"$mod SHIFT, w, exec, /home/fw/scripts/watch"
# Screen focus
"$mod, v, togglefloating"
"$mod, u, focusurgentorlast"
"$mod, tab, focuscurrentorlast"
"$mod, f, fullscreen"
# Screen resize
"$mod CTRL, h, resizeactive, -20 0"
"$mod CTRL, l, resizeactive, 20 0"
"$mod CTRL, k, resizeactive, 0 -20"
"$mod CTRL, j, resizeactive, 0 20"
# Workspaces
"$mod, 1, workspace, 1"
"$mod, 2, workspace, 2"
"$mod, 3, workspace, 3"
"$mod, 4, workspace, 4"
"$mod, 5, workspace, 5"
"$mod, 6, workspace, 6"
"$mod, 7, workspace, 7"
"$mod, 8, workspace, 8"
"$mod, 9, workspace, 9"
"$mod, 0, workspace, 10"
# Move to workspaces
"$mod SHIFT, 1, movetoworkspace,1"
"$mod SHIFT, 2, movetoworkspace,2"
"$mod SHIFT, 3, movetoworkspace,3"
"$mod SHIFT, 4, movetoworkspace,4"
"$mod SHIFT, 5, movetoworkspace,5"
"$mod SHIFT, 6, movetoworkspace,6"
"$mod SHIFT, 7, movetoworkspace,7"
"$mod SHIFT, 8, movetoworkspace,8"
"$mod SHIFT, 9, movetoworkspace,9"
"$mod SHIFT, 0, movetoworkspace,10"
# Navigation
"$mod, h, movefocus, l"
"$mod, l, movefocus, r"
"$mod, k, movefocus, u"
"$mod, j, movefocus, d"
# Applications
"$mod, q, exec, ${pkgs.librewolf}/bin/librewolf"
"$mod, d, exec, ${pkgs.rofi}/bin/rofi -show drun -p 'Run: '"
# Screencapture
"$mod SHIFT, s, exec, ${pkgs.grim}/bin/grim -g \"$(${pkgs.slurp}/bin/slurp)\" - | ${pkgs.wl-clipboard}/bin/wl-copy -t image/png"
# special
"SUPER+SHIFT, code:201, exec, confetti"
];
animation = [
"global, 1, 10, default"
"border, 1, 5.39, easeOutQuint"
"windows, 1, 4.79, easeOutQuint"
"windowsIn, 1, 4.1, easeOutQuint, popin 87%"
"windowsOut, 1, 1.49, linear, popin 87%"
"fadeIn, 1, 1.73, almostLinear"
"fadeOut, 1, 1.46, almostLinear"
"fade, 1, 3.03, quick"
"layers, 1, 3.81, easeOutQuint"
"layersIn, 1, 4, easeOutQuint, fade"
"layersOut, 1, 1.5, linear, fade"
"fadeLayersIn, 1, 1.79, almostLinear"
"fadeLayersOut, 1, 1.39, almostLinear"
"workspaces, 1, 1.94, almostLinear, fade"
"workspacesIn, 1, 1.21, almostLinear, fade"
"workspacesOut, 1, 1.94, almostLinear, fade"
bindm = [
"$mod, mouse:272, movewindow"
"$mod, mouse:273, resizewindow"
];
windowrulev2 = [
"float, class:^(org.pulseaudio.pavucontrol)$"
"size 500 400, class:^(org.pulseaudio.pavucontrol)"
"move onscreen cursor -250 10, class:^(org.pulseaudio.pavucontrol)"
"float, title:^(Bluetooth Devices)$"
"size 500 400, title:^(Bluetooth Devices)"
"move onscreen cursor -250 10, title:^(Bluetooth Devices)"
"float, class:^(.playerctl-gtk-wrapped)$"
"size 300 50, class:^(.playerctl-gtk-wrapped)"
"move onscreen cursor -150 30, class:^(.playerctl-gtk-wrapped)"
];
env = [
"NIXOS_OZONE_WL,1"
"_JAVA_AWT_WM_NONREPARENTING,1"
"QT_WAYLAND_DISABLE_WINDOWDECORATION,1"
"QT_QPA_PLATFORM,wayland"
"SDL_VIDEODRIVER,wayland"
"GDK_BACKEND,wayland"
"XDG_SESSION_TYPE,wayland"
"XDG_SESSION_DESKTOP,Hyprland"
"XDG_CURRENT_DESKTOP,Hyprland"
];
};
cursor = {
enable_hyprcursor = true;
systemd = {
enable = true;
};
dwindle = {
pseudotile = true;
preserve_split = true;
smart_split = false;
smart_resizing = false;
};
misc = {
disable_hyprland_logo = true;
disable_splash_rendering = true;
enable_swallow = true;
swallow_regex = "^(kitty)$";
};
bind = [
# General
"$mod, return, exec, $terminal"
"$mod SHIFT, q, killactive"
"$mod SHIFT, e, exit"
"$mod SHIFT, d, exec, /home/fw/scripts/dmenu_sys"
"$mod SHIFT, x, exec, ${pkgs.hyprlock}/bin/hyprlock"
"$mod SHIFT, w, exec, /home/fw/scripts/watch"
# Screen focus
"$mod, v, togglefloating"
"$mod, u, focusurgentorlast"
"$mod, tab, focuscurrentorlast"
"$mod, f, fullscreen"
# Screen resize
"$mod CTRL, h, resizeactive, -20 0"
"$mod CTRL, l, resizeactive, 20 0"
"$mod CTRL, k, resizeactive, 0 -20"
"$mod CTRL, j, resizeactive, 0 20"
# Workspaces
"$mod, 1, workspace, 1"
"$mod, 2, workspace, 2"
"$mod, 3, workspace, 3"
"$mod, 4, workspace, 4"
"$mod, 5, workspace, 5"
"$mod, 6, workspace, 6"
"$mod, 7, workspace, 7"
"$mod, 8, workspace, 8"
"$mod, 9, workspace, 9"
"$mod, 0, workspace, 10"
# Move to workspaces
"$mod SHIFT, 1, movetoworkspace,1"
"$mod SHIFT, 2, movetoworkspace,2"
"$mod SHIFT, 3, movetoworkspace,3"
"$mod SHIFT, 4, movetoworkspace,4"
"$mod SHIFT, 5, movetoworkspace,5"
"$mod SHIFT, 6, movetoworkspace,6"
"$mod SHIFT, 7, movetoworkspace,7"
"$mod SHIFT, 8, movetoworkspace,8"
"$mod SHIFT, 9, movetoworkspace,9"
"$mod SHIFT, 0, movetoworkspace,10"
# Navigation
"$mod, h, movefocus, l"
"$mod, l, movefocus, r"
"$mod, k, movefocus, u"
"$mod, j, movefocus, d"
# Applications
"$mod, q, exec, ${pkgs.librewolf}/bin/librewolf"
"$mod, d, exec, ${pkgs.rofi}/bin/rofi -show drun -p 'Run: '"
# Screencapture
"$mod SHIFT, s, exec, ${pkgs.grim}/bin/grim -g \"$(${pkgs.slurp}/bin/slurp)\" - | ${pkgs.wl-clipboard}/bin/wl-copy -t image/png"
# special
"SUPER+SHIFT, code:201, exec, confetti"
];
bindm = [
"$mod, mouse:272, movewindow"
"$mod, mouse:273, resizewindow"
];
windowrulev2 = [
"float, class:^(org.pulseaudio.pavucontrol)$"
"size 500 400, class:^(org.pulseaudio.pavucontrol)"
"move onscreen cursor -250 10, class:^(org.pulseaudio.pavucontrol)"
"float, title:^(Bluetooth Devices)$"
"size 500 400, title:^(Bluetooth Devices)"
"move onscreen cursor -250 10, title:^(Bluetooth Devices)"
"float, class:^(.playerctl-gtk-wrapped)$"
"size 300 50, class:^(.playerctl-gtk-wrapped)"
"move onscreen cursor -150 30, class:^(.playerctl-gtk-wrapped)"
];
env = [
"NIXOS_OZONE_WL,1"
"_JAVA_AWT_WM_NONREPARENTING,1"
"QT_WAYLAND_DISABLE_WINDOWDECORATION,1"
"QT_QPA_PLATFORM,wayland"
"SDL_VIDEODRIVER,wayland"
"GDK_BACKEND,wayland"
"XDG_SESSION_TYPE,wayland"
"XDG_SESSION_DESKTOP,Hyprland"
"XDG_CURRENT_DESKTOP,Hyprland"
];
};
systemd = {
enable = true;
};
};
};
};
}

View file

@ -2,27 +2,46 @@
pkgs,
lib,
myhostname,
config,
...
}:
let
capitalize =
s:
(lib.strings.toUpper (builtins.substring 0 1 s))
+ (builtins.substring 1 (builtins.stringLength s - 1) s);
in
with lib;
{
programs.kitty = {
enable = true;
font = {
# name = "ComicShannsMono Nerd Font";
name = "FiraCode Nerd Font Mono";
size = 14;
options = {
kitty = {
enable = mkEnableOption "enables kitty";
theme = lib.mkOption {
type = lib.types.str;
default = "latte";
description = "the theme for kitty";
};
};
shellIntegration = {
mode = "no-cursor";
};
# themeFile = "Catppuccin-Mocha";
themeFile = "Catppuccin-Latte";
settings = {
confirm_os_window_close = 2;
cursor_shape = "block";
cursor_blink_interval = 0;
enable_audio_bell = false;
window_padding_width = 10;
};
config = mkIf config.kitty.enable {
programs.kitty = {
enable = true;
font = {
name = "FiraCode Nerd Font Mono";
size = 14;
};
shellIntegration = {
mode = "no-cursor";
};
themeFile = "Catppuccin-${capitalize config.kitty.theme}";
settings = {
confirm_os_window_close = 2;
cursor_shape = "block";
cursor_blink_interval = 0;
enable_audio_bell = false;
window_padding_width = 10;
};
};
};
}

View file

@ -1,133 +1,138 @@
{ pkgs, lib, ... }:
{ pkgs, lib, config, ... }:
let
palettes = {
latte = {
"os" = "#ACB0BE";
"closer" = "p:os";
"pink" = "#ea76cb";
"lavender" = "#7287FD";
"blue" = "#1e66f5";
"peach" = "#fe640b";
"red" = "#d20f39";
"green" = "#40a02b";
"mauve" = "#8839ef";
};
mocha = {
"os" = "#ACB0BE";
"closer" = "p:os";
"pink" = "#F5BDE6";
"lavender" = "#B7BDF8";
"blue" = "#8aadf4";
"peach" = "#f5a97f";
"red" = "#ed8796";
"green" = "#a6da95";
"mauve" = "#c6a0f6";
};
};
in
with lib;
{
programs.oh-my-posh = {
enable = true;
enableFishIntegration = true;
settings = {
"$schema"= "https://raw.githubusercontent.com/JanDeDobbeleer/oh-my-posh/main/themes/schema.json";
# Macchiato
# "palette" = {
# "os"= "#ACB0BE";
# "closer"= "p:os";
# "pink"= "#F5BDE6";
# "lavender"= "#B7BDF8";
# "blue"= "#8aadf4";
# "peach" = "#f5a97f";
# "red" = "#ed8796";
# "green" = "#a6da95";
# "mauve" = "#c6a0f6";
# };
# Latte
"palette" = {
"os"= "#ACB0BE";
"closer"= "p:os";
"pink" = "#ea76cb";
"lavender" = "#7287FD";
"blue" = "#1e66f5";
"peach" = "#fe640b";
"red" = "#d20f39";
"green" = "#40a02b";
"mauve" = "#8839ef";
};
"blocks"= [
{
"alignment"= "left";
"newline" = true;
"type"= "prompt";
"segments" = [
{
"background"= "transparent";
"foreground"= "p:blue";
# "powerline_symbol"= "\ue0b4";
# "leading_diamond"= "\ue0b6";
"style"= "diamond";
"template"= "{{.Icon}} ";
"type"= "os";
}
{
"foreground"= "p:peach";
"properties"= {
# "folder_icon"= "..\\ue5fe..";
"home_icon"= "~";
"style"= "unique";
};
"style"= "plain";
"template"= "{{ .Path }} ";
"type"= "path";
}
{
"foreground"= "p:green";
"properties"= {
# "branch_icon"= "\\ue725 ";
# "cherry_pick_icon"= "\\ue29b ";
# "commit_icon"= "\\uf417 ";
"fetch_status"= false;
"fetch_upstream_icon"= false;
# "merge_icon"= "\\ue727 ";
# "no_commits_icon"= "\\uf0c3 ";
# "rebase_icon"= "\\ue728 ";
# "revert_icon"= "\\uf0e2 ";
# "tag_icon"= "\\uf412 ";
};
"template"= "{{ .HEAD }} ";
"style"= "plain";
"type"= "git";
}
{
"style"= "plain";
"foreground"= "p:closer";
"type"= "text";
}
{
"foreground"= "p:mauve";
"style"= "plain";
"template"= "{{ .UserName }}@";
"type"= "session";
}
{
"foreground"= "p:peach";
"style"= "plain";
"template"= "{{ .HostName }}";
"type"= "session";
}
];
}
{
"type"= "prompt";
"alignment"= "left";
"newline" = true;
"segments" = [
{
"type" = "text";
"style" = "plain";
"background"= "transparent";
"foreground_templates"= [
"{{if gt .Code 0}}p:red{{end}}"
"{{if eq .Code 0}}p:green{{end}}"
];
"template"= ">";
}
];
}
];
"final_space"= true;
"version"= 2;
"transient_prompt"= {
"background"= "transparent";
"foreground_templates"= [
"{{if gt .Code 0}}p:red{{end}}"
"{{if eq .Code 0}}p:green{{end}}"
];
"template"= ">";
};
"secondary_prompt"= {
"background"= "transparent";
"foreground_templates"= [
"{{if gt .Code 0}}p:red{{end}}"
"{{if eq .Code 0}}p:green{{end}}"
];
"template"= ">";
};
};
};
options = {
oh-my-posh = {
enable = mkEnableOption "enable oh-my-posh";
theme = mkOption {
type = types.enum (builtins.attrNames palettes);
default = "latte";
description = "Catppuccin theme variant for oh-my-posh.";
};
};
};
config = mkIf config.oh-my-posh.enable {
programs.oh-my-posh = {
enable = true;
settings = {
"$schema" = "https://raw.githubusercontent.com/JanDeDobbeleer/oh-my-posh/main/themes/schema.json";
"palette" = palettes.${config.oh-my-posh.theme};
"blocks" = [
{
"alignment" = "left";
"newline" = true;
"type" = "prompt";
"segments" = [
{
"background" = "transparent";
"foreground" = "p:blue";
"style" = "diamond";
"template" = "{{.Icon}} ";
"type" = "os";
}
{
"foreground" = "p:peach";
"properties" = {
"home_icon" = "~";
"style" = "unique";
};
"style" = "plain";
"template" = "{{ .Path }} ";
"type" = "path";
}
{
"foreground" = "p:green";
"properties" = {
"fetch_status" = false;
"fetch_upstream_icon" = false;
};
"template" = "{{ .HEAD }} ";
"style" = "plain";
"type" = "git";
}
{
"style" = "plain";
"foreground" = "p:closer";
"type" = "text";
}
{
"foreground" = "p:mauve";
"style" = "plain";
"template" = "{{ .UserName }}@";
"type" = "session";
}
{
"foreground" = "p:peach";
"style" = "plain";
"template" = "{{ .HostName }}";
"type" = "session";
}
];
}
{
"type" = "prompt";
"alignment" = "left";
"newline" = true;
"segments" = [
{
"type" = "text";
"style" = "plain";
"background" = "transparent";
"foreground_templates" = [
"{{if gt .Code 0}}p:red{{end}}"
"{{if eq .Code 0}}p:green{{end}}"
];
"template" = ">";
}
];
}
];
"final_space" = true;
"version" = 2;
"transient_prompt" = {
"background" = "transparent";
"foreground_templates" = [
"{{if gt .Code 0}}p:red{{end}}"
"{{if eq .Code 0}}p:green{{end}}"
];
"template" = ">";
};
"secondary_prompt" = {
"background" = "transparent";
"foreground_templates" = [
"{{if gt .Code 0}}p:red{{end}}"
"{{if eq .Code 0}}p:green{{end}}"
];
"template" = ">";
};
};
};
};
}

View file

@ -30,15 +30,17 @@
discord
slack
speedcrunch
remmina
# remmina
vial
via
drawio
freecad-wayland
evince
openboard
jan
vlc
vscode
spotify
ansible
# TUI
mpc

View file

@ -0,0 +1,27 @@
{ config, pkgs, ... }:
let
confettiListener = pkgs.writeShellScript "confetti-listener" ''
#!/usr/bin/env bash
set -euo pipefail
exec dbus-monitor "interface='org.freedesktop.Notifications'" | \
while read -r line; do
if echo "$line" | grep -q "confetti"; then
confetti
fi
done
'';
in {
systemd.user.services.confetti-listener = {
description = "Listen for notifications and trigger confetti";
after = [ "graphical-session.target" ];
partOf = [ "graphical-session.target" ];
wantedBy = [ "graphical-session.target" ];
path = with pkgs; [ dbus gnugrep coreutils ];
serviceConfig = {
ExecStart = "${confettiListener}";
Restart = "always";
RestartSec = "1s";
};
};
}

View file

@ -2,19 +2,35 @@
config,
inputs,
pkgs,
lib,
...
}:
let
in
with lib;
{
programs.k9s = {
enable = true;
settings = {
k9s.ui.skin = "catppuccin-latte";
};
skins = {
catppuccin-latte = ./latte-transparent.yml;
};
options = {
k9s = {
enable = mkEnableOption "enable k9s";
theme = mkOption {
type = types.str;
default = "latte";
description = "Catppuccin theme variant for k9s.";
};
};
};
config = mkIf config.k9s.enable {
programs.k9s = {
enable = true;
settings = {
k9s.ui.skin = "catppuccin-${config.k9s.theme}";
};
skins = {
catppuccin-latte = ./latte-transparent.yml;
catppuccin-mocha = ./mocha-transparent.yml;
};
};
};
}

View file

@ -0,0 +1,100 @@
k9s:
body:
fgColor: '#cdd6f4'
bgColor: default
logoColor: '#cba6f7'
prompt:
fgColor: '#cdd6f4'
bgColor: default
suggestColor: '#89b4fa'
help:
fgColor: '#cdd6f4'
bgColor: default
sectionColor: '#a6e3a1'
keyColor: '#89b4fa'
numKeyColor: '#eba0ac'
frame:
title:
fgColor: '#94e2d5'
bgColor: default
highlightColor: '#f5c2e7'
counterColor: '#f9e2af'
filterColor: '#a6e3a1'
border:
fgColor: '#cba6f7'
focusColor: '#b4befe'
menu:
fgColor: '#cdd6f4'
keyColor: '#89b4fa'
numKeyColor: '#eba0ac'
crumbs:
fgColor: '#1e1e2e'
bgColor: default
activeColor: '#f2cdcd'
status:
newColor: '#89b4fa'
modifyColor: '#b4befe'
addColor: '#a6e3a1'
pendingColor: '#fab387'
errorColor: '#f38ba8'
highlightColor: '#89dceb'
killColor: '#cba6f7'
completedColor: '#6c7086'
info:
fgColor: '#fab387'
sectionColor: '#cdd6f4'
views:
table:
fgColor: '#cdd6f4'
bgColor: default
cursorFgColor: '#313244'
cursorBgColor: '#45475a'
markColor: '#f5e0dc'
header:
fgColor: '#f9e2af'
bgColor: default
sorterColor: '#89dceb'
xray:
fgColor: '#cdd6f4'
bgColor: default
cursorColor: '#45475a'
cursorTextColor: '#1e1e2e'
graphicColor: '#f5c2e7'
charts:
bgColor: default
chartBgColor: default
dialBgColor: default
defaultDialColors:
- '#a6e3a1'
- '#f38ba8'
defaultChartColors:
- '#a6e3a1'
- '#f38ba8'
resourceColors:
cpu:
- '#cba6f7'
- '#89b4fa'
mem:
- '#f9e2af'
- '#fab387'
yaml:
keyColor: '#89b4fa'
valueColor: '#cdd6f4'
colonColor: '#a6adc8'
logs:
fgColor: '#cdd6f4'
bgColor: default
indicator:
fgColor: '#b4befe'
bgColor: default
toggleOnColor: '#a6e3a1'
toggleOffColor: '#a6adc8'
dialog:
fgColor: '#f9e2af'
bgColor: default
buttonFgColor: '#1e1e2e'
buttonBgColor: default
buttonFocusFgColor: '#1e1e2e'
buttonFocusBgColor: '#f5c2e7'
labelFgColor: '#f5e0dc'
fieldFgColor: '#cdd6f4'

View file

@ -19,6 +19,11 @@ with lib;
default = ./waybar.jsonc;
description = "The path to the waybar config";
};
stylePath = lib.mkOption {
type = lib.types.path;
default = ./waybar-latte.css;
description = "The path to the waybar config";
};
};
};
config = mkIf config.waybar.enable {
@ -31,7 +36,7 @@ with lib;
};
};
xdg.configFile."waybar/config.jsonc".source = config.waybar.configPath;
xdg.configFile."waybar/style.css".source = ./waybar-latte.css;
xdg.configFile."waybar/style.css".source = config.waybar.stylePath;
};
# catppuccin.waybar = {
# enable = true;

View file

@ -10,12 +10,12 @@
],
"modules-right": [
"mpris",
"bluetooth",
"pulseaudio",
"bluetooth",
"clock"
],
"mpris": {
"player": "Feishin",
// "player": "Feishin",
"format": "{player_icon} {title} — {artist}",
"format-paused": " {player_icon} {title}",
"format-stopped": "",
@ -27,8 +27,7 @@
"interval": 1,
"tooltip": true,
"tooltip-format": "{player} — {status}\n{artist}\n{title}\n{album}",
// "on-click": "playerctl -p Feishin play-pause",
"on-click": "pgrep playerctl-gtk && pkill playerctl-gtk || playerctl-gtk &",
"on-click": "playerctl play-pause"
},
"bluetooth": {
"format": " {status}",

View file

@ -0,0 +1,57 @@
{
lib,
pkgs,
config,
...
}:
with lib;
{
options = {
gotify = {
enable = mkEnableOption "enables gotify";
port = lib.mkOption {
type = lib.types.int;
default = 8857;
description = "The port gotify listens on.";
};
host = mkOption {
type = types.str;
defaultText = literalExpression "127.0.0.1";
description = "The hostname that gotify binds to";
};
domain = mkOption {
type = types.str;
defaultText = literalExpression "home.wastring.com";
description = "The hostname that gotify binds to";
};
};
};
config = mkMerge [
(mkIf config.gotify.enable {
sops.secrets.gotify_password = { };
services.gotify = {
enable = true;
environmentFiles = [
config.sops.secrets.gotify_password.path
];
environment = {
GOTIFY_DATABASE_DIALECT = "sqlite3";
GOTIFY_SERVER_PORT = config.gotify.port;
GOTIFY_DEFAULTUSER_NAME = "admin";
};
};
services.nginx.virtualHosts.${config.gotify.domain} = {
forceSSL = true;
enableACME = true;
locations."/" = {
proxyPass = "http://${toString config.gotify.host}:${toString config.gotify.port}";
proxyWebsockets = true;
};
};
})
];
}

View file

@ -0,0 +1,47 @@
{
lib,
pkgs,
config,
...
}:
with lib;
{
options = {
kanboard = {
enable = mkEnableOption "enables kanboard";
port = lib.mkOption {
type = lib.types.int;
default = 3128;
description = "The port kanboard listens on.";
};
host = mkOption {
type = types.str;
defaultText = literalExpression "127.0.0.1";
description = "The hostname that kanboard binds to";
};
domain = mkOption {
type = types.str;
defaultText = literalExpression "home.wastring.com";
description = "The hostname that kanboard binds to";
};
};
};
config = mkMerge [
(mkIf config.kanboard.enable {
services.kanboard = {
enable = true;
domain = config.kanboard.domain;
nginx = null;
};
services.nginx.virtualHosts.${config.kanboard.domain} = {
forceSSL = true;
enableACME = true;
locations."/" = {
proxyPass = "http://${toString config.kanboard.host}:${toString config.kanboard.port}";
proxyWebsockets = true;
};
};
})
];
}

View file

@ -29,7 +29,7 @@
bluez-tools
# Zathura
poppler_utils
poppler-utils
# Transform
imagemagick

View file

@ -18,7 +18,7 @@ in
passwordFile = config.sops.secrets.github_password.path;
registry = "https://ghcr.io";
};
image = "ghcr.io/fwastring/wedding:8eed91e3c05fde5f826f25de4c7bccdbc312caef";
image = "ghcr.io/fwastring/wedding:28ed2ea29640230e3de7bc998c4cdd63e19ae391";
ports = [ "127.0.0.1:8083:8080" ];
};
};