{ config, lib, pkgs, ... }: { # 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; # accounts.email.accounts = { # personal = { # address = "chris@cochrun.xyz"; # mbsync.enable = true; # create = "maildir"; # mu.enable = true; # imap = { # host = "mail.cochrun.xyz"; # port = 993; # tls.enable = true; # }; # smtp = { # host = "mail.cochrun.xyz"; # port = 25; # tls.enable = true; # }; # }; # work = { # address = "chris@tfcconnection.org"; # mbsync.enable = true; # create = "maildir"; # mu.enable = true; # imap = { # host = "outlook.office365.com"; # port = 993; # tls.enable = true; # }; # smtp = { # host = "mail.cochrun.xyz"; # port = 25; # tls.enable = true; # }; # }; # }; programs.git = { enable = true; userName = "Chris Cochrun"; userEmail = "chris@cochrun.xyz"; }; home.packages = with pkgs; [ ]; programs.mu.enable = true; programs.mbsync = { enable = true; extraConfig = '' IMAPAccount gmail Host imap.gmail.com User ccochrun21@gmail.com PassCmd "rbw get gmail" AuthMechs LOGIN SSLType IMAPS SSLVersions SSLv3 # CertificateFile /opt/local/share/curl/curl-ca-bundle.crt IMAPAccount office Host outlook.office365.com User chris@tfcconnection.org PassCmd "rbw get 'Office 365'" AuthMechs LOGIN SSLType IMAPS IMAPAccount outlook Host outlook.office365.com User chris.cochrun@outlook.com PassCmd "rbw get outlook" AuthMechs LOGIN SSLType IMAPS IMAPAccount cochrun Host mail.cochrun.xyz User chris@cochrun.xyz PassCmd "rbw get 'Office 365'" AuthMechs LOGIN SSLType IMAPS # SSLVersions SSLv3 # CertificateFile /opt/local/share/curl/curl-ca-bundle.crt # THEN WE SPECIFY THE LOCAL AND REMOTE STORAGE # - THE REMOTE STORAGE IS WHERE WE GET THE MAIL FROM (E.G., THE # SPECIFICATION OF AN IMAP ACCOUNT) # - THE LOCAL STORAGE IS WHERE WE STORE THE EMAIL ON OUR COMPUTER # REMOTE STORAGE (USE THE IMAP ACCOUNT SPECIFIED ABOVE) IMAPStore gmail-remote Account gmail MaildirStore gmail-local Path ~/Maildir/gmail/ Inbox ~/Maildir/gmail/INBOX IMAPStore office-remote Account office # LOCAL STORAGE (CREATE DIRECTORIES with mkdir -p Maildir/gmail) MaildirStore office-local Path ~/Maildir/office/ Inbox ~/Maildir/office/INBOX Subfolders Verbatim IMAPStore outlook-remote Account outlook MaildirStore outlook-local Path ~/Maildir/outlook/ Inbox ~/Maildir/outlook/INBOX Subfolders Verbatim IMAPStore cochrun-remote Account cochrun MaildirStore cochrun-local Path ~/Maildir/cochrun/ Inbox ~/Maildir/cochrun/INBOX Subfolders Verbatim # CONNECTIONS SPECIFY LINKS BETWEEN REMOTE AND LOCAL FOLDERS # # CONNECTIONS ARE SPECIFIED USING PATTERNS, WHICH MATCH REMOTE MAIl # FOLDERS. SOME COMMONLY USED PATTERS INCLUDE: # # 1 "*" TO MATCH EVERYTHING # 2 "!DIR" TO EXCLUDE "DIR" # 3 "DIR" TO MATCH DIR Channel gmail-inbox Far :gmail-remote: Near :gmail-local: Patterns "INBOX" Create Both Expunge Both SyncState * Channel gmail-trash Far :gmail-remote:"[Gmail]/Bin" Near :gmail-local:"[Gmail].Bin" Create Both Expunge Both SyncState * Channel gmail-sent Far :gmail-remote:"[Gmail]/Sent Mail" Near :gmail-local:"[Gmail].Sent Mail" Create Both Expunge Both SyncState * Channel gmail-all Far :gmail-remote:"[Gmail]/All Mail" Near :gmail-local:"[Gmail].All Mail" Create Both Expunge Both SyncState * Channel gmail-starred Far :gmail-remote:"[Gmail]/Starred" Near :gmail-local:"[Gmail].Starred" Create Both Expunge Both SyncState * Channel office-inbox Far :office-remote: Near :office-local: Patterns "*" Create Both Expunge Both SyncState * Channel outlook-inbox Far :outlook-remote: Near :outlook-local: Patterns "*" Create Both Expunge Both SyncState * Channel cochrun-inbox Far :cochrun-remote: Near :cochrun-local: Patterns "*" Create Both Expunge Both SyncState * # GROUPS PUT TOGETHER CHANNELS, SO THAT WE CAN INVOKE # MBSYNC ON A GROUP TO SYNC ALL CHANNELS # # FOR INSTANCE: "mbsync gmail" GETS MAIL FROM # "gmail-inbox", "gmail-sent", and "gmail-trash" # # Group gmail # Channel gmail-inbox # Channel gmail-sent # Channel gmail-trash # Channel gmail-all # Channel gmail-starred Group office Channel office-inbox Group outlook Channel outlook-inbox Group cochrun Channel cochrun-inbox ''; }; 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 = if builtins.readFile "/etc/hostname" == "syl\n" then ../mpv-syl else ../mpv; }; home.file.".config/hypr/hyprpaper.conf" = { source = if builtins.readFile "/etc/hostname" == "syl\n" then /home/chris/.dotfiles/hypr/hyprpaper.conf else /home/chris/.dotfiles/hypr/hyprpaper.conf; }; home.file.".config/hypr/hyprsome" = { source = if builtins.readFile "/etc/hostname" == "syl\n" then /home/chris/.dotfiles/hypr/hyprsome else /home/chris/.dotfiles/hypr/hyprsome; }; home.file.".config/hypr/hyprland.conf" = { text = '' monitor=eDP-1,2256x1504@60,0x0,1.5 workspace=eDP-1,1 monitor=DVI-D-1,preferred,0x0,1 monitor=HDMI-A-1,preferred,0x0,1 monitor=DP-3,preferred,1080x0,1.5 workspace=DVI-D-1,2 workspace=DP-3,1 workspace=HDMI-A-1,2 monitor=DVI-D-1,transform,1 input { # kb_layout= # kb_variant= # kb_model= # kb_options= # kb_rules= repeat_rate=140 repeat_delay=180 natural_scroll=0 sensitivity=0.85 accel_profile=adaptive follow_mouse=2 touchpad { natural_scroll=1 clickfinger_behavior=1 } } general { max_fps=60 # deprecated, unused # main_mod=SUPER gaps_in=15 gaps_out=20 border_size=0 col.active_border=0x66ee1111 col.inactive_border=0x66333333 #damage_tracking=full # leave it on full unless you hate your GPU and want to make it suffer layout=master } gestures { workspace_swipe=true workspace_swipe_fingers=3 } decoration { rounding=18 active_opacity=0.95 inactive_opacity=0.85 fullscreen_opacity=1.0 blur=true blur_new_optimizations=true blur_size=9# minimum 1 blur_passes=5 # minimum 1, more passes = more resource intensive. # Your blur "amount" is blur_size * blur_passes, but high blur_size (over around 5-ish) will produce artifacts. # if you want heavy blur, you need to up the blur_passes. # the more passes, the more you can up the blur_size without noticing artifacts. drop_shadow=true shadow_range=20 shadow_offset=2 2 shadow_render_power=1 dim_inactive=true dim_strength=0.2 } bezier=snapslide,0.07,0.66,0.04,1.02 animations { enabled=1 animation=windows,1,2,snapslide # animation=borders,1,10,default animation=fadeIn,1,2,snapslide animation=workspaces,1,2,snapslide animation=specialWorkspace,1,2,snapslide,slidevert } dwindle { pseudotile=0 # enable pseudotiling on dwindle } master { special_scale_factor=0.7 new_is_master=false new_on_top=false } # misc:disable_autoreload = true # example window rules # for windows named/classed as abc and xyz windowrule=opaque,firefox windowrule=float,dolphin ${if builtins.readFile "/etc/hostname" == "syl\n" then "# this is a kaladin space" else "windowrule=workspace 1,mpv"} windowrule=float,mpv ${if builtins.readFile "/etc/hostname" == "syl\n" then "windowrule=size 90% 76%,mpv" else "windowrule=size 85% 85%,mpv"} windowrule=center,mpv windowrule=float,pulsemixer windowrule=workspace 1,firefox windowrule=workspace 2,emacs windowrule=float,btop windowrule=size 70% 70%,btop windowrule=center,btop windowrule=float,presenter windowrule=size 80% 80%,presenter windowrule=center,presenter # example binds bind = SUPER,RETURN,exec,alacritty bind = SUPER,C,killactive, bind = SUPERSHIFT,Q,exit, bind = SUPERSHIFT,D,exec,dolphin bind = SUPERSHIFT,F,togglefloating, bindr = SUPER,Super_L,exec,/home/chris/bin/launcher.sh bindr = ALT,Alt_L,exec,/home/chris/bin/window.sh bind = SUPER,w,exec,/home/chris/bin/window.sh bind = SUPER,E,exec,/home/chris/bin/emacslof bind = SUPER,d,exec,emacsclient -c -e '(dired-jump)' bind = SUPER,B,exec,/home/chris/bin/fflof bind = SUPER,A,exec,alacritty --class pulsemixer -e pulsemixer bind = SUPERCTRL,i,exec,alacritty --class btop -e btop bind = SUPER,P,exec,/home/chris/bin/rbw.sh bind = SUPER,M,fullscreen,1 bind = SUPER,F,fullscreen,0 bind = SUPER,h,movefocus,l bind = SUPER,l,movefocus,r bind = SUPER,k,cyclenext,prev bind = SUPER,j,cyclenext bind = SUPERSHIFT,h,movewindow,l bind = SUPERSHIFT,l,movewindow,r bind = SUPERSHIFT,k,movewindow,u bind = SUPERSHIFT,j,movewindow,d bind = SUPERCTRL,l,splitratio,+0.05 bind = SUPERCTRL,h,splitratio,-0.05 bind = SUPERCTRL,c,centerwindow bind = SUPER,1,workspace,1 bind = SUPER,2,workspace,2 bind = SUPER,3,workspace,3 bind = SUPER,4,workspace,4 bind = SUPER,5,workspace,5 bind = SUPER,6,workspace,6 bind = SUPER,7,workspace,7 bind = SUPER,8,workspace,8 bind = SUPER,9,workspace,9 bind = SUPER,0,workspace,10 bind = SUPERALT,l,workspace,m+1 bind = SUPERALT,h,workspace,m-1 bind = SUPERSHIFT,1,movetoworkspace,1 bind = SUPERSHIFT,2,movetoworkspace,2 bind = SUPERSHIFT,3,movetoworkspace,3 bind = SUPERSHIFT,4,movetoworkspace,4 bind = SUPERSHIFT,5,movetoworkspace,5 bind = SUPERSHIFT,6,movetoworkspace,6 bind = SUPERSHIFT,7,movetoworkspace,7 bind = SUPERSHIFT,8,movetoworkspace,8 bind = SUPERSHIFT,9,movetoworkspace,9 bind = SUPERSHIFT,0,movetoworkspace,10 bind = SUPER,o,movewindow,mon: next bind = SUPER,y,togglespecialworkspace bind = SUPER,i,movewindow,left bind = SUPERSHIFT,p,pin bind = SUPER,n,movetoworkspace,special binde = , XF86AudioMute, exec, pamixer -t binde = , XF86AudioRaiseVolume, exec, /home/chris/bin/volup binde = , XF86AudioLowerVolume, exec, /home/chris/bin/voldown binde = ,F1, exec, pamixer -t binde = ,F3, exec, /home/chris/bin/volup binde = ,F2, exec, /home/chris/bin/voldown binde = , XF86MonBrightnessUp, exec, brightnessctl s +10% binde = , XF86MonBrightnessDown, exec, brightnessctl s 10%- bind=SUPERCTRL,b,exec,eww.sh bind=SUPERALT,n,exec,eww update rightside=true bindm=SUPER,mouse:272,movewindow bindm=SUPER,mouse:273,resizewindow # Blur waybar # blurls=gtk-layer-shell # blurls=notifications exec-once = /home/chris/bin/startup.sh exec-once = hyprpaper exec-once = dunst exec-once = hyprctl dispatch --batch "splitratio 1; splitration -0.35" exec-once = dbus-update-activation-environment --systemd --all exec-once = jellyfin-mpv-shim exec-once = hyprctl setcursor phinger-cursors-light ''; }; services.nextcloud-client = { enable = true; startInBackground = true; }; services.syncthing.enable = true; # services.kdeconnect.enable = true; services.easyeffects.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.file.".config/rofi" = { source = ../rofi; recursive = true; }; programs.firefox = { enable = true; package = pkgs.firefox-wayland.override { cfg = { enableTridactylNative = true; enablePlasmaBrowserIntegration = true; }; }; profiles.chris = { name = "default"; path = "nw77o6yc.default"; isDefault = true; }; }; home.file.".mozilla/native-messaging-hosts".source = "/run/current-system/sw/lib/mozilla/native-messaging-hosts"; home.file.".mozilla/firefox/nw77o6yc.default/chrome" = { source = ../firefox/chrome; recursive = true; }; home.file.".config/tridactyl" = { source = ../tridactyl; recursive = true; }; programs.rbw.enable = true; home.file.".config/rbw" = { source = ../rbw; recursive = true; }; home.file.".config/fish/config.fish" = { source = ../fish/config.fish; }; home.file.".config/fish/functions" = { source = ../fish/functions; }; programs.nushell = { enable = true; }; home.file.".config/dunst" = { source = ../dunst; }; programs.direnv.enable = true; programs.direnv.nix-direnv.enable = true; # programs.qutebrowser.enable = true; home.file.".config/qutebrowser/config.py" = { source = ../qutebrowser/config.py; }; home.file.".config/qutebrowser/bookmarks" = { source = ../qutebrowser/bookmarks; }; home.file.".config/qutebrowser/css" = { source = ../qutebrowser/css; }; home.file.".config/qutebrowser/quickmarks" = { source = ../qutebrowser/quickmarks; }; home.file.".config/qutebrowser/qsettings" = { source = ../qutebrowser/qsettings; }; home.file.".config/imv" = { source = ../imv; recursive = true; }; home.file.".config/macchina" = { source = ../macchina; recursive = true; }; home.file.".config/awesome" = { source = ../awesome; recursive = true; }; home.file.".config/awesome/bling" = { source = ../awesome/bling; recursive = true; }; home.file.".config/awesome/rubato" = { source = ../awesome/rubato; recursive = true; }; home.file.".config/alacritty" = { source = ../alacritty; recursive = true; }; home.file.".config/picom.conf" = { source = ../picom.conf; }; # home.file.".config/networkmanager-dmenu/config.ini" = { # source = ../networkmanager-dmenu/config.ini; # }; home.file."bin" = { source = ../scripts; recursive = true; }; home.shellAliases = { ls = "exa -l"; la = "exa -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 ~/Videos/%(title)s.%(ext)s"; }; programs.starship = { enable = true; enableBashIntegration = true; }; 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 source $(blesh-share) ble-face auto_complete="fg=238" # eval "$(starship init bash)" ''; }; programs.zsh = { enable = true; enableAutosuggestions = true; enableCompletion = true; enableSyntaxHighlighting = true; autocd = true; dotDir = ".config/zsh"; shellAliases = { ls = "exa -l"; la = "exa -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"; }; 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"]; }; }; nextlcoud-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"]; }; }; }; }