dotfiles/home/home.nix
2025-05-23 10:28:30 -05:00

1660 lines
45 KiB
Nix
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{ config, lib, pkgs, inputs, ... }:
let
laptop = builtins.readFile "/etc/hostname" == ''
syl
'';
in {
imports = [
./modules/hyprland.nix
./modules/rofi.nix
# ags.homeManagerModules.default
# ./modules/plasma.nix
];
# Home Manager needs a bit of information about you and the
# paths it should manage.
home.username = "chris";
home.homeDirectory = "/home/chris";
# 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 = "21.11"; # Did you read the comment?
# Let Home Manager install and manage itself.
programs.home-manager.enable = true;
xdg = {
userDirs = {
enable = true;
desktop = "${config.home.homeDirectory}";
documents = "${config.home.homeDirectory}/docs";
download = "${config.home.homeDirectory}/dls";
music = "${config.home.homeDirectory}/music";
pictures = "${config.home.homeDirectory}/pics";
publicShare = "${config.home.homeDirectory}";
templates = "${config.home.homeDirectory}";
videos = "${config.home.homeDirectory}/vids";
};
portal = {
enable = true;
config = {
common = {
default = [ pkgs.kdePackages.xdg-desktop-portal-kde pkgs.xdg-desktop-portal-cosmic ];
"org.freedesktop.impl.portal.FileChooser" = [ "kde" ];
};
hyprland = {
default = [ "hyprland" ];
"org.freedesktop.impl.portal.FileChooser" = [ "kde" ];
};
};
extraPortals = [ pkgs.kdePackages.xdg-desktop-portal-kde pkgs.xdg-desktop-portal-cosmic ];
};
mimeApps = {
enable = true;
associations.added = {
"video/mp4" = "mpv.desktop";
"video/webm" = "mpv.desktop";
"video/mkv" = "mpv.desktop";
"video/x-matroska" = "mpv.desktop";
"video/quicktime" = "mpv.desktop";
"video/mpeg" = "mpv.desktop";
"video/ogg" = "mpv.desktop";
"video/VP9" = "mpv.desktop";
"video/VP8" = "mpv.desktop";
"video/AV1" = "mpv.desktop";
"video/H265" = "mpv.desktop";
"video/H264" = "mpv.desktop";
"video/vnd.youtube.yt" = "mpv.desktop";
"inode/directory" = "dolphin.desktop";
"image/gif" = "imv-rifle.desktop";
"image/jpeg" = "imv-rifle.desktop";
"image/heif" = "imv-rifle.desktop";
"image/png" = "imv-rifle.desktop";
"image/webp" = "imv-rifle.desktop";
"audio/vorbis" = "mpv-slow.desktop";
"audio/mp3" = "mpv-slow.desktop";
"audio/m4a" = "mpv-slow.desktop";
"audio/flac" = "mpv-slow.desktop";
"audio/wav" = "mpv-slow.desktop";
"audio/opus" = "mpv-slow.desktop";
"audio/x-opus" = "mpv-slow.desktop";
"audio/x-opus+ogg" = "mpv-slow.desktop";
"x-scheme-handler/http" = "librewolf.desktop";
"x-scheme-handler/https" = "librewolf.desktop";
"text/html" = "librewolf.desktop";
"text/org" = "emacsclient.desktop";
"text/md" = "emacsclient.desktop";
"text/txt" = "emacsclient.desktop";
"text/rs" = "emacsclient.desktop";
"text/plain" = "emacsclient.desktop";
"application/pdf" = "okular.desktop";
"x-scheme-handler/about" = "librewolf.desktop";
"x-scheme-handler/unknown" = "librewolf.desktop";
"x-scheme-handler/magnet" = "torrent.desktop";
};
defaultApplications = {
"video/mp4" = "mpv.desktop";
"video/webm" = "mpv.desktop";
"video/mkv" = "mpv.desktop";
"video/x-matroska" = "mpv.desktop";
"video/quicktime" = "mpv.desktop";
"video/mpeg" = "mpv.desktop";
"video/ogg" = "mpv.desktop";
"video/VP9" = "mpv.desktop";
"video/VP8" = "mpv.desktop";
"video/AV1" = "mpv.desktop";
"video/H265" = "mpv.desktop";
"video/H264" = "mpv.desktop";
"video/vnd.youtube.yt" = "mpv.desktop";
"inode/directory" = "dolphin.desktop";
"image/gif" = "imv-rifle.desktop";
"image/jpeg" = "imv-rifle.desktop";
"image/heif" = "imv-rifle.desktop";
"image/png" = "imv-rifle.desktop";
"image/webp" = "imv-rifle.desktop";
"audio/vorbis" = "mpv-slow.desktop";
"audio/mp3" = "mpv-slow.desktop";
"audio/m4a" = "mpv-slow.desktop";
"audio/flac" = "mpv-slow.desktop";
"audio/wav" = "mpv-slow.desktop";
"audio/opus" = "mpv-slow.desktop";
"x-scheme-handler/http" = "librewolf.desktop";
"x-scheme-handler/https" = "librewolf.desktop";
"text/html" = "librewolf.desktop";
"text/org" = "emacsclient.desktop";
"text/md" = "emacsclient.desktop";
"text/txt" = "emacsclient.desktop";
"text/rs" = "emacsclient.desktop";
"text/plain" = "emacsclient.desktop";
"application/pdf" = "okular.desktop";
"x-scheme-handler/about" = "librewolf.desktop";
"x-scheme-handler/unknown" = "librewolf.desktop";
"x-scheme-handler/magnet" = "torrent.desktop";
};
};
};
# home.file.".config/xdg-desktop-portal/portals.conf" = {
# text = ''
# [preferred]
# org.freedesktop.impl.portal.FileChooser=kde
# '';
# };
programs.gpg = { enable = true; };
services.gpg-agent = {
enable = true;
pinentryPackage = pkgs.pinentry-emacs;
# extraConfig = ''
# pinentry-program ${pkgs.pinentry.qt}/bin/pinentry
# '';
};
qt = {
enable = true;
style.package = [
inputs.darkly.packages.${pkgs.system}.darkly-qt5
inputs.darkly.packages.${pkgs.system}.darkly-qt6
# pkgs.kdePackages.callPackage ../pkgs/darkly-pkg.nix { }
];
platformTheme.name = "qtct";
};
accounts.email = {
maildirBasePath = "mail";
accounts = {
personal = {
address = "chris@cochrun.xyz";
userName = "chris@cochrun.xyz";
mbsync.enable = true;
mu.enable = true;
flavor = "plain";
primary = true;
passwordCommand = "${pkgs.rbw}/bin/rbw get 'Office 365'";
realName = "Chris Cochrun";
signature = {
text = ''
Praising God in all things,
Chris Cochrun
'';
delimiter = ''
***
'';
showSignature = "append";
};
imap = {
host = "mail.cochrun.xyz";
port = 993;
tls = {
enable = true;
# certificatesFile = ./certs.txt;
};
};
smtp = {
host = "mail.cochrun.xyz";
port = 25;
tls = {
enable = true;
# certificatesFile = ./certs.txt;
};
};
mbsync = {
create = "maildir";
remove = "both";
expunge = "both";
};
maildir.path = "cochrun";
};
work = {
address = "chris@tfcconnection.org";
userName = "chris@tfcconnection.org";
mbsync.enable = true;
mu.enable = true;
flavor = "outlook.office365.com";
passwordCommand = "cat ~/.config/access";
realName = "Chris Cochrun";
imap = {
host = "outlook.office365.com";
port = 993;
tls.enable = true;
};
smtp = {
host = "smtp.office365.com";
port = 587;
tls.enable = true;
};
mbsync = {
create = "maildir";
remove = "both";
expunge = "both";
extraConfig.account = { AuthMechs = "XOAUTH2"; };
};
maildir.path = "office";
signature = {
text = ''
Praising God in all things,
Chris Cochrun
'';
delimiter = ''
***
'';
showSignature = "append";
};
};
};
};
programs.git = {
enable = true;
userName = "Chris Cochrun";
userEmail = "chris@cochrun.xyz";
};
home.packages = with pkgs; [ ];
programs.mu.enable = true;
programs.mbsync = {
package = pkgs.isync.override { withCyrusSaslXoauth2 = true; };
enable = true;
};
programs.msmtp.enable = true;
services.mbsync.enable = true;
programs.obs-studio = {
enable = true;
plugins = [ pkgs.obs-studio-plugins.obs-move-transition ];
};
# home.file.".config/mpv" = {
# source = ../.config/mpv;
# };
programs.mpv = {
enable = true;
scripts = with pkgs.mpvScripts; [
thumbfast
videoclip
mpris
quality-menu
modernx-zydezu
sponsorblock
];
config = {
osc = "no";
vo = "gpu";
af = "scaletempo2";
input-ipc-server = "/tmp/mpvsocket";
hwdec = "auto";
rtsp-transport = "udp";
speed = 1.95;
gpu-context = "wayland";
ytdl-format =
"bestvideo[height<=?720][fps<=?30][vcodec!=?vp9]+bestaudio/best";
};
profiles = {
fast.speed = 1.95;
slow.speed = 1;
wc = {
speed = 1;
osd-level = 0;
load-scripts = "no";
profile = "low-latency";
demuxer-lavf-format = "video4linux2";
demuxer-lavf-o-set =
"input_format=mjpeg,video_size=1920x1080,framerate=60";
fps = 60;
};
};
scriptOpts = {
videoclip = {
video_folder_path = "/home/chris/vids";
audio_folder_path = "/home/chris/music";
};
};
};
# home.file.".config/ags" = {
# source = ../.config/ags;
# };
# services.kdeconnect.enable = true;
services = {
syncthing = {
enable = true;
# dataDir = "/home/chris";
# openDefaultPorts = true;
# configDir = "/home/chris/.config/syncthing";
# user = "chris";
# group = "users";
guiAddress = "0.0.0.0:8384";
overrideFolders = true;
overrideDevices = true;
tray.enable = true;
settings = {
devices = {
kaladin = {
id = (if laptop then
"PMB4FRV-2CAPFCQ-UFELVNI-YAQRRHE-MMMXQ4P-RXEXBZV-QEUL6QN-KZEW5AM"
else
"");
};
syl = {
id = (if laptop then
""
else
"FPELBL2-Y6BMDOB-4TXM75K-VZV7IR3-JDMM35Z-TUEZKXX-YAPUTL6-K5SFQAN");
};
shadow = {
id =
"B24VU6Z-URTMEXN-ZYKRWX7-XWSTHXD-XKX67EB-XSKMT4V-KWKGX7Q-W7DB2QV";
};
tablet = {
id =
"4HEXCNH-MCVBZQX-LQ735TG-P2VTJ7N-CZ5MK4P-ICZAPC7-YCXVEWV-7NILMA5";
};
kohlin = {
id =
"BSWKBRR-2IJBCHA-UQY7DE7-CV2U2IL-PMFQFCJ-D5ZZJMU-FPYRUPC-MCC32QQ";
};
dalinar = {
id =
"MPRMA33-XHW6SRE-D2EDBCP-TSMRNGI-ZCE2TAN-FE4BMKA-PSKGYJW-CRIEJQL";
};
};
folders = {
docs = {
path = "${config.home.homeDirectory}/docs";
devices =
[ (if laptop then "kaladin" else "syl") "shadow" "dalinar" ];
# versioning = {
# type = "staggered";
# fsPath = "~/.local/share/syncthing/backup";
# params = {
# cleanInterval = 3600;
# maxAge = 31536000;
# };
# };
};
music = {
id = "teqqy-rzvec";
path = "${config.home.homeDirectory}/music";
devices =
[ "dalinar" (if laptop then "kaladin" else "syl") "shadow" ];
};
};
};
};
easyeffects.enable = true;
nextcloud-client = {
enable = true;
startInBackground = true;
};
mpd.enable = true;
pueue.enable = true;
# For matrix clients that don't have e2ee
pantalaimon = {
enable = false;
settings = {
Default = {
LogLevel = "Debug";
SSL = true;
};
local-matrix = {
Homeserver = "https://matrix.tfcconnection.org";
ListenAddress = "127.0.0.1";
ListenPort = 8008;
# SSL = true;
# IgnoreVerification = true;
};
};
};
};
# stylix = {
# enable = true;
# polarity = "dark";
# base16Scheme = {
# base00 = "282a36";
# base01 = "34353e";
# base02 = "43454f";
# base03 = "78787e";
# base04 = "a5a5a9";
# base05 = "e2e4e5";
# base06 = "eff0eb";
# base07 = "f1f1f0";
# base08 = "ff5c57";
# base09 = "ff9f43";
# base0A = "f3f99d";
# base0B = "5af78e";
# base0C = "9aedfe";
# base0D = "57c7ff";
# base0E = "ff6ac1";
# base0F = "b2643c";
# };
# image = config.lib.stylix.pixel "base0D";
# # targets.tofi.enable = false;
# };
# programs.tofi.enable = true;
#services.espanso = {
# enable = true;
# settings = {
# toggle_key = "RIGHT_CTRL";
# matches = [
# { # dates
# trigger = ":date";
# replace = "{{mydate}}";
# vars = [{
# name = "mydate";
# type = "date";
# params = {format = "%m/%d/%Y";};
# }];
# }
# { # Shell commands
# trigger = ":shell";
# replace = "{{output}}";
# vars = [{
# name = "output";
# type = "shell";
# params = { cmd = "echo Hello from your shell";};
# }];
# }
# { # simple text
# trigger = ":gml";
# replace = "ccochrun21@gmail.com";
# }
# {
# trigger = ":otl";
# replace = "chris.cochrun@outlook.com";
# }
# {
# trigger = ":tfcml";
# replace = "chris@tfcconnection.org";
# }
# {
# trigger = ":name";
# replace = "Chris Cochrun";
# }
# {
# trigger = ":cn";
# replace = "A Giant Gummy Lizard";
# }
# ];
# };
#};
home.pointerCursor = {
gtk.enable = true;
package = pkgs.phinger-cursors;
name = "phinger-cursors-light";
size = 32;
};
dconf.settings = {
"org/gnome/desktop/interface" = { color-scheme = "prefer-dark"; };
};
gtk = {
enable = true;
cursorTheme = {
name = "phinger-cursors-light";
package = pkgs.phinger-cursors;
size = 32;
};
font = {
name = "VictorMono Nerd Font";
size = 11;
};
iconTheme = {
name = "Papirus-Dark";
package = pkgs.papirus-icon-theme;
};
# theme.name = "Breeze";
gtk3.extraConfig = {
gtk-application-prefer-dark-theme = true;
gtk-button-images = true;
gtk-decoration-layout = "icon:minimize,maximize,close";
gtk-enable-animations = true;
gtk-enable-event-sounds = 1;
gtk-menu-images = true;
gtk-primary-button-warps-slider = true;
gtk-xft-antialias = 1;
gtk-xft-dpi = 98304;
gtk-xft-hinting = 1;
gtk-xft-hintstyle = "hintfull";
gtk-xft-rgba = "rgb";
};
};
services.cliphist = { enable = true; };
home.file.".config/bottom" = {
source = ../.config/bottom;
recursive = true;
};
home.file.".mozilla/firefox/nw77o6yc.default/chrome" = {
source = ../.config/firefox/chrome;
recursive = true;
};
home.file.".mozilla/firefox/nw77o6yc.default/user.js" = {
text = ''
// userchrome.css usercontent.css activate
user_pref("toolkit.legacyUserProfileCustomizations.stylesheets", true);
// disable new sidebar
user_pref("sidebar.revamp", false);
// Fill SVG Color
user_pref("svg.context-properties.content.enabled", true);
// CSS's `:has()` selector
user_pref("layout.css.has-selector.enabled", true);
// Integrated calculator at urlbar
user_pref("browser.urlbar.suggest.calculator", true);
// Integrated unit convertor at urlbar
user_pref("browser.urlbar.unitConversion.enabled", true);
// Trim URL
user_pref("browser.urlbar.trimHttps", true);
user_pref("browser.urlbar.trimURLs", true);
// GTK rounded corners
user_pref("widget.gtk.rounded-bottom-corners.enabled", true);
// Who is bogus? (fixes Sidebery tab dragging on Linux)
user_pref("widget.gtk.ignore-bogus-leave-notify", 1);
'';
};
home.file.".librewolf/nw77o6yc.default/chrome" = {
source = ../.config/firefox/chrome;
recursive = true;
};
home.file.".librewolf/nw77o6yc.default/user.js" = {
text = ''
// userchrome.css usercontent.css activate
user_pref("toolkit.legacyUserProfileCustomizations.stylesheets", true);
// disable new sidebar
user_pref("sidebar.revamp", false);
// Fill SVG Color
user_pref("svg.context-properties.content.enabled", true);
// CSS's `:has()` selector
user_pref("layout.css.has-selector.enabled", true);
// Integrated calculator at urlbar
user_pref("browser.urlbar.suggest.calculator", true);
// Integrated unit convertor at urlbar
user_pref("browser.urlbar.unitConversion.enabled", true);
// Trim URL
user_pref("browser.urlbar.trimHttps", true);
user_pref("browser.urlbar.trimURLs", true);
// GTK rounded corners
user_pref("widget.gtk.rounded-bottom-corners.enabled", true);
// Who is bogus? (fixes Sidebery tab dragging on Linux)
user_pref("widget.gtk.ignore-bogus-leave-notify", 1);
user_pref("shyfox.remove.window.controls", true);
user_pref("dom.webgpu.enabled", true);
user_pref("dom.webgpu.indirect_draw.enabled", true);
user_pref("dom.webgpu.workers.enabled", true);
'';
};
home.file.".config/tridactyl" = {
source = ../.config/tridactyl;
recursive = true;
};
# home.file.".librewolf/native-messaging-hosts/tridactyl.json" = {
# source = pkgs.tridactyl-native;
# };
programs.librewolf = {
enable = true;
package = pkgs.librewolf-wayland.override {
nativeMessagingHosts =
[ pkgs.kdePackages.plasma-browser-integration pkgs.tridactyl-native ];
};
profiles.chris = {
name = "default";
path = "nw77o6yc.default";
isDefault = true;
};
};
programs.eww = {
enable = true;
# configDir = ../.config/eww;
};
programs.waybar = {
enable = true;
settings = {
mainBar = {
layer = "top";
output = [ "DP-1" "eDP-1" ];
position = if laptop then "bottom" else "top";
height = 35;
width = if laptop then 1400 else 3000;
# Choose the order of the modules "custom/wintitle",
modules-left = [ "hyprland/workspaces" "hyprland/window" ];
modules-center = [ ];
modules-right =
[ "pulseaudio" "backlight" "disk" "memory" "cpu" "battery" "custom/gpu" "tray" "clock" ];
margin-top = if laptop then -5 else 5;
margin-bottom = if laptop then 4 else 0;
margin-left = 6;
margin-right = 6;
"hyprland/window" = { format = " <span style='italic'>{}</span>"; };
workspaces = { format = " {name} "; };
"hyprland/workspaces" = {
format = "{icon}";
format-icons = {
"1" = "";
"2" = "";
"3" = "󰈙";
"4" = "󰭹";
"5" = "";
"6" = "";
"7" = "󰕧";
"8" = "󰭹";
"9" = "";
};
all-outputs = true;
# on-scroll-up = "hyprctl dispatch workspace e+1";
# on-scroll-down = "hyprctl dispatch workspace e-1";
};
tray = {
icon-size = 20;
spacing = 10;
};
clock = {
tooltip-format = ''
<big>{:%Y %B}</big>
<tt><small>{calendar}</small></tt>'';
format-alt = "{:%Y-%m-%d}";
format = "{:%a %b %e, %I:%M %p}";
};
cpu = { format = " {usage}%"; on-click = "alacritty --class btop -e btop"; };
memory = { format = " {}%"; on-click = "alacritty --class btop -e btop"; };
"custom/gpu" = {
exec = "cat /sys/class/hwmon/hwmon0/device/gpu_busy_percent";
format = "󱤓 {}%";
return-type = "";
interval = 1;
on-click = "alacritty --class btop -e nvtop";
};
temperature = {
# "thermal-zone": 2,
# "hwmon-path": "/sys/class/hwmon/hwmon2/temp1_input",
critical-threshold = 80;
# "format-critical": "{temperatureC}°C {icon}",
format = "{icon} {temperatureC}°C";
format-icons = [ "" "" "" ];
};
backlight = {
# "device": "acpi_video1",
format = "{icon} {PERCENT}%";
format-icons = [ "" "" ];
};
disk = {
format = "󰋊 {percentage_used}%";
tooltip-format = "{used} out of {total} with {free} left";
};
battery = {
states = {
good = 95;
warning = 30;
critical = 15;
};
format = "{icon} {capacity}%";
format-charging = "{icon} {capacity}%";
format-plugged = " {capacity}%";
format-alt = "{time} {icon}";
format-good = "{icon} {capacity}%";
format-full = "󰁹 {capacity}%";
format-icons = [ "󰁺" "󰁼" "󰁾" "󰂀" "󰂂" ];
format-charging-icons = [ "󰢜" "󰂇" "󰢝" "󰢞" "󰂋" ];
};
network = {
# "interface": "wlp2*", // (Optional) To force the use of this interface
format-wifi = " ({signalStrength}%)";
format-ethernet = "󰈀 {ipaddr}";
format-linked = "{ifname} (No IP)";
format-disconnected = "Disconnected ";
format-alt = "{ifname}: {essid} {ipaddr}/{cidr}";
};
pulseaudio = {
scroll-step = 1;
format = "{icon} {volume}%";
format-muted = "󰝟 muted";
format-source = "";
format-source-muted = "";
format-icons = {
headphone = [ "" "" "" ];
phone = "";
portable = "";
car = "";
default = [ "" "" "" ];
};
on-click = "alacritty --class pulsemixer -e pulsemixer";
ignored-sinks = [ "Easy Effects Sink" ];
};
};
};
style = ''
@define-color base00 #282a36;
@define-color base01 #34353e;
@define-color base02 #43454f;
@define-color base03 #78787e;
@define-color base04 #a5a5a9;
@define-color base05 #e2e4e5;
@define-color base06 #eff0eb;
@define-color base07 #f1f1f0;
@define-color base08 #ff5c57;
@define-color base09 #ff9f43;
@define-color base0A #f3f99d;
@define-color base0B #5af78e;
@define-color base0C #9aedfe;
@define-color base0D #57c7ff;
@define-color base0E #ff6ac1;
@define-color base0F #b2643c;
@define-color basetransparent rgba(40, 42, 54, 0.0);
@define-color backtransparent rgba(40, 42, 54, 0.7);
* {
border: 1px;
border-radius: 20px;
font-family: VictorMono Nerd Font;
font-size: 15px;
font-weight: normal;
box-shadow: none;
text-shadow: none;
transition-duration: 0s;
padding-top: 0px;
padding-bottom: 0px;
}
window {
background: transparent;
/* border-radius: 20px; */
}
window#waybar > box {
color: @base05;
margin: 12px 14px 14px 14px;
background: transparent;
}
.modules-right {
padding-top: 2px;
padding-bottom: 2px;
padding-left: 5px;
padding-right: 5px;
background: @backtransparent;
box-shadow: 5px 5px 4px 4px #202020;
border-radius: 20px;
}
.modules-left {
padding-top: 2px;
padding-bottom: 2px;
padding-right: 10px;
background: @backtransparent;
box-shadow: 5px 5px 4px 4px #202020;
border-radius: 20px;
}
tooltip {
background: @base00;
border: 1px solid @base0D;
}
tooltip label {
padding: 10px;
}
#workspaces {
border-radius: 20px;
padding-right: 10px;
background: transparent;
transition: none;
color: @base0C;
}
#tags {
border-radius: 20px;
margin-left: 6px;
padding-right: 10px;
background: transparent;
transition: none;
}
#workspaces button {
padding: 0 0.7em;
transition: none;
color: rgba(217, 216, 216, 0.4);
background: transparent;
}
#tags button {
transition: none;
color: rgba(217, 216, 216, 0.4);
background: transparent;
}
#workspaces button.visible {
color: @base0C;
}
#tags button.occupied {
color: rgba(217, 216, 216, 1);
}
#workspaces button.focused {
color: @base09;
}
#tags button.focused {
color: @base0C;
}
#workspaces button:hover {
transition: none;
box-shadow: inherit;
text-shadow: inherit;
color: @base0E;
}
#workspaces button.urgent {
color: @base08;
}
#mode, #battery, #cpu, #memory, #network, #pulseaudio, #idle_inhibitor, #backlight, #custom-storage, #disk, #custom-weather, #custom-mail {
margin: 0px 3px 0px 3px;
/* min-width: 25px; */
}
#clock {
margin-left: 2px;
margin-right: 2px;
padding-left: 10px;
padding-right: 10px;
border-radius: 20px;
transition: none;
color: @base0B;
background: transparent;
}
#backlight {
margin-left: 2px;
margin-right: 2px;
padding-left: 5px;
padding-right: 5px;
border-radius: 20px;
transition: none;
color: @base08;
background: transparent;
}
#battery.warning {
color: @base09;
}
#battery.critical {
color: @base08;
}
#battery.charging {
color: @base0B;
}
#pulseaudio {
padding-left: 5px;
padding-right: 5px;
border-radius: 20px;
transition: none;
color: @base0A;
background: transparent;
}
#network {
padding-left: 5px;
padding-right: 5px;
border-radius: 20px;
transition: none;
color: @base0B;
background: transparent;
}
#cpu {
padding-left: 5px;
padding-right: 5px;
border-radius: 20px;
transition: none;
color: @base09;
background: transparent;
}
#custom-gpu {
padding-left: 5px;
padding-right: 5px;
border-radius: 20px;
transition: none;
color: @base08;
background: transparent;
}
#battery {
padding-left: 5px;
padding-right: 5px;
border-radius: 20px;
transition: none;
color: @base0D;
background: transparent;
}
#battery.bat2 {
margin-right: 10px;
}
#memory {
padding-left: 5px;
padding-right: 5px;
border-radius: 20px;
transition: none;
color: @base0C;
background: transparent;
}
#disk {
padding-left: 5px;
padding-right: 5px;
border-radius: 20px;
transition: none;
color: @base0E;
background: transparent;
}
#tray {
padding-left: 15px;
padding-right: 5px;
border-radius: 20px;
transition: none;
color: @base0E;
background: transparent;
}
'';
};
programs.rbw.enable = true;
home.file.".config/rbw" = {
source = ../.config/rbw;
recursive = true;
};
# home.file.".config/fish/config.fish" = {
# source = ../.config/fish/config.fish;
# };
home.file.".config/fish/functions" = { source = ../.config/fish/functions; };
# programs.ags = {
# enable = true;
# extraPackages = with pkgs; [
# gtksourceview
# webkitgtk
# accountsservice
# ];
# };
programs.fish = {
enable = true;
interactiveShellInit = ''
function fish_greeting -d "what's up, fish?"
# set_color $fish_color_autosuggestion[1]
# uname -npsr
# uptime
# set_color normal
end
function fish_title
if [ "$theme_display_virtualenv" = 'no' -o -z "$VIRTUAL_ENV" ]
printf '(%s) %s' $_ (prompt_pwd)
else
printf '(%s) %s' (basename "$VIRTUAL_ENV") (prompt_pwd)
end
end
function _prompt_whoami -a sep_color -a color -d "Display user@host if on a SSH session"
if set -q SSH_TTY
echo -n -s $color (whoami)@(hostnamectl --static) $sep_color '|'
end
end
function _git_branch_name
echo (command git symbolic-ref HEAD 2> /dev/null | sed -e 's|^refs/heads/||')
end
function _is_git_dirty
echo (command git status -s --ignore-submodules=dirty 2> /dev/null)
end
function _git_ahead_count -a remote -a branch_name
echo (command git log $remote/$branch_name..HEAD 2> /dev/null | \
grep '^commit' | wc -l | tr -d ' ')
end
function _git_dirty_remotes -a remote_color -a ahead_color
set current_branch (command git rev-parse --abbrev-ref HEAD 2> /dev/null)
set current_ref (command git rev-parse HEAD 2> /dev/null)
for remote in (git remote | grep 'origin\|upstream')
set -l git_ahead_count (_git_ahead_count $remote $current_branch)
set remote_branch "refs/remotes/$remote/$current_branch"
set remote_ref (git for-each-ref --format='%(objectname)' $remote_branch)
if test "$remote_ref" != \'\'
if test "$remote_ref" != $current_ref
if [ $git_ahead_count != 0 ]
echo -n "$remote_color!"
echo -n "$ahead_color+$git_ahead_count$normal"
end
end
end
end
end
function _prompt_git -a gray normal orange red yellow
test "$theme_display_git" = no; and return
set -l git_branch (_git_branch_name)
test -z $git_branch; and return
if test "$theme_display_git_dirty" = no
echo -n -s $gray '' $yellow $git_branch $gray ' '
return
end
set dirty_remotes (_git_dirty_remotes $red $orange)
if [ (_is_git_dirty) ]
echo -n -s $gray '' $yellow $git_branch $red '*' $dirty_remotes $gray ' '
else
echo -n -s $gray '' $yellow $git_branch $red $dirty_remotes $gray ' '
end
end
function _prompt_pwd
set_color -o cyan
printf '%s' (prompt_pwd)
end
function _prompt_status_arrows -a exit_code
if test $exit_code -ne 0
set arrow_colors green
else
set arrow_colors green
end
for arrow_color in $arrow_colors
set_color $arrow_color
printf '»'
end
end
function fish_prompt
set -l exit_code $status
set -l gray (set_color 666)
set -l blue (set_color blue)
set -l red (set_color red)
set -l normal (set_color normal)
set -l yellow (set_color yellow)
set -l orange (set_color ff9900)
set -l green (set_color green)
printf $gray'['
_prompt_whoami $gray $green
if test "$theme_display_pwd_on_second_line" != yes
_prompt_pwd
printf '%s' $gray
end
printf '%s] %0.3fs' $gray (math $CMD_DURATION / 1000)
if set -q SCORPHISH_GIT_INFO_ON_FIRST_LINE
set theme_display_git_on_first_line
end
if set -q theme_display_git_on_first_line
_prompt_git $gray $normal $orange $red $yellow
end
if test "$theme_display_pwd_on_second_line" = yes
printf $gray'\n'
_prompt_pwd
printf $gray''
end
printf '\n'
if not set -q theme_display_git_on_first_line
_prompt_git $gray $normal $orange $red $yellow
end
_prompt_status_arrows $exit_code
printf ' '
set_color normal
end
function fish_right_prompt
set -l exit_code $status
if test $exit_code -ne 0
set_color red
else
set_color green
end
printf '%d' $exit_code
set_color -o 666
echo '|'
set_color -o 777
printf '%s' (date +%H:%M:%S)
set_color normal
end
### VI MODES
# Emulates vim's cursor shape behavior
# Set the normal and visual mode cursors to a block
set fish_cursor_default block
# Set the insert mode cursor to a line
set fish_cursor_insert line
# Set the replace mode cursor to an underscore
set fish_cursor_replace_one underscore
# The following variable can be used to configure cursor shape in
# visual mode, but due to fish_cursor_default, is redundant here
set fish_cursor_visual block
### BANG BANG FUNCTIONS
function __history_previous_command
switch (commandline -t)
case "!"
commandline -t $history[1]
commandline -f repaint
case "*"
commandline -i !
end
end
function __history_previous_command_arguments
switch (commandline -t)
case "!"
commandline -t ""
commandline -f history-token-search-backward
case "*"
commandline -i '$'
end
end
### bindings
function fish_user_key_bindings
fish_vi_key_bindings
bind -M insert ! __history_previous_command
bind -M insert '$' __history_previous_command_arguments
end
${pkgs.any-nix-shell}/bin/any-nix-shell fish --info-right | source
starship init fish | source
'';
};
programs.nushell = {
enable = true;
shellAliases = {
# ls = "eza -l";
# la = "ls -la";
mpf = "mpv --profile=fast";
mps = "mpv --profile=slow";
ec = "emacsclient -t";
ecc = "emacsclient -c";
# mkdir = "mkdir -p";
nupd = "update-nix";
nupg = "upgrade-nix";
suspend = "systemctl suspend";
sysuse = "systemctl --user";
myip = "curl icanhazip.com";
nixs = "nix search nixpkgs";
# ytd = "yt-dlp -o '~/Videos/%(title)s.%(ext)s'";
};
configFile = {
text = ''
let fish_completer = {|spans|
fish --command $'complete "--do-complete=($spans | str join " ")"'
| $"value(char tab)description(char newline)" + $in
| from tsv --flexible --no-infer
}
$env.config = {
show_banner: false
}
# def start_zellij [] {
# if 'ZELLIJ' not-in ($env | columns) {
# if 'ZELLIJ_AUTO_ATTACH' in ($env | columns) and $env.ZELLIJ_AUTO_ATTACH == 'true' {
# zellij attach -c
# } else {
# zellij
# }
# if 'ZELLIJ_AUTO_EXIT' in ($env | columns) and $env.ZELLIJ_AUTO_EXIT == 'true' {
# exit
# }
# }
# }
# start_zellij
'';
};
environmentVariables = { EDITOR = ''"emacsclient -t"''; };
};
# home.file.".config/dunst" = {
# source = ../.config/dunst;
# };
services.dunst = {
enable = true;
iconTheme = {
package = pkgs.papirus-icon-theme;
name = "Papirus-Dark";
size = "16x16";
};
settings = {
global = {
monitor = 2;
follow = "none";
width = "(0, 300)";
height = "(0, 500)";
offset = "20x50";
origin = if laptop then "bottom-right" else "top-right";
notification_limit = 0;
progress_bar = true;
progress_bar_height = 10;
progress_bar_frame_width = 1;
progress_bar_min_width = 150;
progress_bar_max_width = 300;
transparency = 30;
separator_height = 2;
padding = 10;
horizontal_padding = 8;
text_icon_padding = 8;
frame_width = 0;
frame_color = "#aaaaaa";
gap_size = 8;
separator_color = "frame";
sort = "yes";
font = "VictorMono Nerd Font 10";
markup = "full";
format = ''
<b>%s</b>
%b'';
alignment = "center";
vertical_alignment = "center";
corner_radius = 18;
dmenu = "${pkgs.rofi}/bin/rofi -dmenu -p dunst:";
};
urgency_low = {
background = "#282a36aa";
foreground = "#57c7ff";
timeout = 10;
};
urgency_normal = {
background = "#282a36aa";
foreground = "#5af78e";
timeout = 10;
};
urgency_critical = {
background = "#282a36aa";
foreground = "#ff5c57";
frame_color = "#ff0000";
timeout = 0;
};
};
};
programs.atuin = {
enable = true;
enableNushellIntegration = true;
};
programs.direnv = {
enable = true;
nix-direnv.enable = true;
enableNushellIntegration = true;
};
programs.carapace = {
enable = true;
enableNushellIntegration = true;
};
# programs.qutebrowser.enable = true;
home.file.".config/qutebrowser/config.py" = {
source = ../.config/qutebrowser/config.py;
};
home.file.".config/qutebrowser/css" = {
source = ../.config/qutebrowser/css;
};
home.file.".local/share/qutebrowser/greasemonkey" = {
source = ../.config/qutebrowser/greasemonkey;
};
home.file.".config/imv" = {
source = ../.config/imv;
recursive = true;
};
home.file.".config/macchina" = {
source = ../.config/macchina;
recursive = true;
};
#home.file.".config/awesome" = {
# source = ../awesome;
# recursive = true;
#};
home.file.".config/awesome/bling" = {
source = ../.config/awesome/bling;
recursive = true;
};
home.file.".config/awesome/rubato" = {
source = ../.config/awesome/rubato;
recursive = true;
};
# home.file.".config/alacritty" = {
# source = ../.config/alacritty;
# };
home.file.".config/picom.conf" = { source = ../.config/picom.conf; };
# home.file.".config/networkmanager-dmenu/config.ini" = {
# source = ../networkmanager-dmenu/config.ini;
# };
home.file."bin" = {
source = ../scripts;
recursive = false;
};
home.shellAliases = {
# ls = "eza -l";
# la = "eza -la";
mpf = "mpv --profile=fast";
mps = "mpv --profile=slow";
ec = "emacsclient -t";
ecc = "emacsclient -c";
# mkdir = "mkdir -pv";
nupd = "update-nix";
nupg = "upgrade-nix";
suspend = "systemctl suspend";
sysuse = "systemctl --user";
myip = "curl icanhazip.com";
nixs = "nix search nixpkgs";
# ytd = ''yt-dlp -o "~/vids/%(title)s.%(ext)s" $1'';
};
programs.alacritty = {
enable = true;
settings = {
window = {
opacity = 0.9;
dynamic_title = true;
padding.x = 10;
padding.y = 10;
dynamic_padding = true;
};
terminal.shell.program = "nu";
font = {
normal = {
family = "VictorMono Nerd Font";
style = "Regular";
};
bold = {
family = "VictorMono Nerd Font";
style = "Bold";
};
italic = {
family = "VictorMono Nerd Font";
style = "Italic";
};
size = 12.0;
};
colors = {
transparent_background_colors = true;
draw_bold_text_with_bright_colors = true;
primary = {
background = "#282a36";
foreground = "#eff0eb";
};
cursor.cursor = "#97979b";
selection = {
text = "#282a36";
background = "#feffff";
};
normal = {
black = "#282a36";
red = "#ff5c57";
green = "#5af78e";
yellow = "#f3f99d";
blue = "#57c7ff";
magenta = "#ff6ac1";
cyan = "#9aedfe";
white = "#f1f1f0";
};
bright = {
black = "#686868";
red = "#ff5c57";
green = "#5af78e";
yellow = "#f3f99d";
blue = "#57c7ff";
magenta = "#ff6ac1";
cyan = "#9aedfe";
white = "#eff0eb";
};
};
};
};
programs.starship = {
enable = true;
enableNushellIntegration = true;
enableBashIntegration = true;
enableFishIntegration = true;
settings = {
format = ''
[\[](fg:#78787e) $username$hostname$directory[\]](fg:#78787e) [$cmd_duration$time$status](italic fg:#78787e)
$character
'';
right_format = ''
$git_branch$git_status$rust$nix_shell
'';
cmd_duration = {
format = " $duration";
min_time = 0;
show_notifications = true;
min_time_to_notify = 20000;
};
time = { format = "| $time"; };
status = { format = "| $status"; };
scan_timeout = 10;
rust = { format = "[$symbol($version )]($style)"; };
cmake = {
format = "";
disabled = true;
};
nix_shell = {
format = "[$symbol$state( ($name))]($style) ";
impure_msg = " ";
pure_msg = " ";
};
hostname = { format = "@[$ssh_symbol$hostname]($style) > '"; };
git_branch = { format = "[$symbol$branch(:$remote_branch)]($style) "; };
git_status = {
format = "[\\[$all_status$ahead_behind\\]]($style) |(dimmed gray) ";
};
character = {
success_symbol = "[󰄾](bold green)";
error_symbol = "[x](bold red)";
};
};
};
programs.bash = {
enable = true;
bashrcExtra = ''
# export ENV_EFI_CODE_SECURE=/run/libvirt/nix-ovmf/OVMF_CODE.fd ENV_EFI_VARS_SECURE=/run/libvirt/nix-ovmf/OVMF_VARS.fd
case "$-" in
*i*)
eval "$(starship init bash)"
macchina;;
esac
# export LESS_TERMCAP_mb=$'\e[1;32m'
# export LESS_TERMCAP_md=$'\e[1;32m'
# export LESS_TERMCAP_me=$'\e[0m'
# export LESS_TERMCAP_se=$'\e[0m'
# export LESS_TERMCAP_so=$'\e[01;33m'
# export LESS_TERMCAP_ue=$'\e[0m'
# export LESS_TERMCAP_us=$'\e[1;4;31m'
'';
};
programs.zsh = {
enable = true;
autosuggestion.enable = true;
enableCompletion = true;
syntaxHighlighting.enable = true;
autocd = true;
dotDir = ".config/zsh";
shellAliases = {
ls = "eza -l";
la = "eza -la";
mpf = "mpv --profile=fast";
mps = "mpv --profile=slow";
ec = "emacsclient -t";
ecc = "emacsclient -c";
mkdir = "mkdir -pv";
nupd = "update-nix";
nupg = "upgrade-nix";
suspend = "systemctl suspend";
sysuse = "systemctl --user";
myip = "curl icanhazip.com";
ytd = ''yt-dlp -o "~/vids/%(title)s.%(ext)s" $1'';
};
initExtra = ''
macchina
'';
};
xdg.desktopEntries = {
mpv-slow = {
name = "MPV";
genericName = "Play from MPV but at normal speed";
exec = "alacritty -e mpv --profile=slow %U";
terminal = true;
categories = [ "Application" ];
mimeType = [
"audio/ogg"
"audio/mpeg"
"audio/opus"
"audio/x-opus+ogg"
"audio/x-wav"
];
};
imv-rifle = {
name = "IMV";
genericName = "Show images in current directory in IMV";
exec = "/home/chris/bin/rifle-imv %U";
terminal = false;
categories = [ "Application" ];
mimeType = [ "image/gif" "image/jpeg" "image/png" "image/heif" ];
};
};
systemd.user.services = {
ydotoold = {
Unit = {
Description = "An auto-input utility for wayland";
Documentation = [ "man:ydotool(1)" "man:ydotoold(8)" ];
};
Service = {
ExecStart =
"/run/current-system/sw/bin/ydotoold --socket-path /tmp/ydotools";
};
Install = { WantedBy = [ "default.target" ]; };
};
jellyfin-mpv-shim = {
Unit = {
Description = "Play Jellyfin media in mpv";
After = "graphical-session-pre.target";
};
Service = { ExecStart = "/run/current-system/sw/bin/jellyfin-mpv-shim"; };
Install = { WantedBy = [ "graphical-session.target" ]; };
};
# nextcloud-client = {
# Unit = {
# Description = "Nextcloud Client";
# After = [ "graphical-session.target" ];
# # PartOf = [ "plasma-workspace.target" ];
# };
# Service = {
# Environment = ["PATH=/etc/profiles/per-user/chris/bin"
# "WAYLAND_DISPLAY=wayland-1"];
# };
# };
};
}