diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/common.nix | 1 | ||||
-rw-r--r-- | lib/emacs-packages.nix | 2 | ||||
-rw-r--r-- | lib/linux.nix | 464 | ||||
-rw-r--r-- | lib/packages.nix | 1 |
4 files changed, 467 insertions, 1 deletions
diff --git a/lib/common.nix b/lib/common.nix index 197d8de..cbe0d25 100644 --- a/lib/common.nix +++ b/lib/common.nix @@ -111,6 +111,7 @@ in chainreplyto = false; composeencoding = "UTF-8"; annotate = "yes"; + cccmd = "git-contacts"; }; log = { date = "local"; diff --git a/lib/emacs-packages.nix b/lib/emacs-packages.nix index 09061b3..b8dc912 100644 --- a/lib/emacs-packages.nix +++ b/lib/emacs-packages.nix @@ -30,7 +30,7 @@ emojify eww-lnum flycheck flycheck-haskell -geiser +# geiser # broken? general melpaStablePackages.git-timemachine haskell-mode diff --git a/lib/linux.nix b/lib/linux.nix new file mode 100644 index 0000000..6823c8e --- /dev/null +++ b/lib/linux.nix @@ -0,0 +1,464 @@ +{ pkgs, lib, ... }: + +let + homedir = builtins.getEnv "HOME"; + hostname = lib.strings.removeSuffix "\n" (builtins.readFile /etc/hostname); + gpgid = "66A6AD150399D970DCA4C4E6C8218B7D0BFDECCD"; + cmdtree = pkgs.stdenv.mkDerivation { + name = "cmdtree"; + src = fetchGit { + url = "https://git.sr.ht/~jb55/cmdtree"; + ref = "master"; + rev = "5606078e8fa02462f0208d9f9cad98c7673812e6"; + }; + buildPhase = '' + cp ${./cfg.def.h} ./cfg.def.h + make + ''; + installPhase = '' + mkdir -p $out/bin + cp ./cmdtree $out/bin + ''; + buildInputs = [ pkgs.xorg.libX11 pkgs.xorg.libXft ]; + }; + + base16-scheme = "spacemacs"; + base16 = pkgs.stdenv.mkDerivation { + name = "base16-builder"; + src = builtins.fetchTarball { + url = "https://github.com/auduchinok/base16-builder/archive/51e3ad4d447fc3f1f539d0bfe33c851728fb6b5f.tar.gz"; + sha256 = "1qir689h38c6jr7fbbqbc3029544zgv41lrrqdcq26kcwxcwjrz1"; + }; + nativeBuildInputs = [pkgs.ruby]; + buildPhase = "${pkgs.ruby}/bin/ruby base16 -s schemes/${base16-scheme}.yml"; + installPhase = '' + mkdir -p $out + cp -r output/* $out + ''; + }; + theme = lib.removeSuffix "\n" (builtins.readFile "${homedir}/.local/share/xtheme"); + xresources = "${base16}/xresources/base16-${base16-scheme}.${theme}.xresources"; + + colors = { # derived from spacemacs + "dark" = { + highlight = "#5d4d7a"; + background = "#292b2e"; + foreground = "#b2b2b2"; + }; + "light" = { + highlight = "#67b11d"; + background = "#f6f1e1"; + foreground = "#655370"; + }; + }; + xmonadPackages = self: [ + self.xmonad-contrib + #self.taffybar # fails to build + self.xmonad-extras + self.monad-logger + ]; +in +{ + imports = [ + ./common.nix + ./email.nix + ]; + home = { + keyboard.options = [ "caps:ctrl_modifier" ]; + sessionVariables = { + LOCALE_ARCHIVE = "${pkgs.glibcLocales}/lib/locale/locale-archive"; + }; + file = { + mutt = { + text = (builtins.readFile ./muttrc) + + (builtins.readFile ./mutt/solarized.muttrc); + target = ".muttrc"; + }; + mailcap = { + source = ./mailcap; + target = ".mailcap"; + }; + xbindkeys = { + source = ./xbindkeysrc; + target = ".xbindkeysrc"; + }; + }; + + packages = with pkgs; [ + acpi + apvlv + beets + bind + blueman + cmdtree + dict + dmenu + dolphin + exercism + feh + flameshot + gopher + glibcLocales # rofi locale fix -- https://github.com/rycee/home-manager/issues/354#issuecomment-415914278 + gnumake + gnupg + gopher + hledger-ui + hledger-web + keybase-gui + ledger + libnotify + lshw + minitube + mononoki + mplayer + msmtp + muchsync + mumble + neomutt + obs-studio + pandoc + pasystray + pavucontrol + pdftk + pinentry + sqlite + tdesktop + terminus + texlive.combined.scheme-full + torbrowser + usbutils + utillinux + vlc + xbindkeys + xclip + xdotool + xlayoutdisplay + xorg.xmodmap + xournal + xterm + yank + youtube-dl + zathura + + # languages i regularly use + (haskellPackages.ghcWithPackages (a: with a; [hledger rainbow])) # for hledger scripting + guile + python3 + ]; + }; + fonts.fontconfig.enable = true; + + xresources = { + properties = { + "XTerm*font" = "-*-FiraMono-medium-r-normal--18-*-*-*-*-*-iso10646-1"; + "XTerm*faceName" = "FireMono"; + "XTerm*faceSize" = "10"; + "XTerm*termName" = "xterm-256color"; + "XTerm*metaSendsEscape" = true; + "XTerm*utf8" = true; + #"Xautolock.time:" = 1; + #"Xautolock.locker:" = "xlock"; + #"Xautolock.corners:" = "+0-0"; + #"Xautolock.cornerdelay:" = 3; + #"Xautolock.notify:" = 30; + #"Xautolock.notifier:" = "notify-send -u critical -t 10000 -- 'Locking screen in 30 seconds'"; + }; + extraConfig = builtins.readFile(xresources); + }; + + services = { + lorri.enable = false; + emacs.enable = true; + + kbfs.enable = true; + keybase.enable = true; + + mbsync = { + enable = if hostname == "lithium" then true else false; + frequency = "*:0/5"; + postExec = "${pkgs.notmuch}/bin/notmuch new"; + }; + + mpd = { + enable = true; + musicDirectory = "/mnt/campbell/ben/music"; + network = { + listenAddress = "0.0.0.0"; + port = 6600; + }; + extraConfig = '' + audio_output { + type "httpd" + name "HTTP Stream" + encoder "vorbis" + port "8097" + quality "7.0" + format "44100:16:2" + } + ''; + }; + + polybar = { + # https://github.com/0x746866/dots/blob/master/polybar/config + enable = true; + config = { + "bar/top" = { + background = colors."${theme}".background; + font-0 = "FiraSans:size=16"; + font-1 = "Font Awesome 5:pixelsize=11;1"; + font-2 = "MaterialIcons:size=10:antialias=false;2"; + foreground = colors."${theme}".foreground; + height = "30"; + module-margin = 1; + modules-center = "date"; + modules-left = "volume-bar"; + modules-right = [ "battery" "cpu" "mem" "temp" ]; + monitor = "\${env:MONITOR:HDMI-1}"; + monitor-fallback = "\${env:MONITOR:eDP-1}"; + radius = 0; + separator = "|"; + tray-background = colors."${theme}".background; + tray-detached = false; + tray-maxsize = 16; + tray-offset-x = 0; + tray-offset-y = 0; + tray-padding = 0; + tray-position = "right"; + tray-scale = 1; + width = "100%"; + }; + "module/date" = { + type = "internal/date"; + internal = 5; + date = "%Y.%m.%d"; + time = "%H.%M"; + label = "%date%..%time%"; + }; + "module/battery" = { + type = "internal/battery"; + battery = "BAT0"; + adapter = "AC"; + full-at = 99; + }; + "module/volume-bar" = { + type = "internal/volume"; + bar-volume-font = 2; + bar-volume-width = 9; + format-volume = "<label-volume><bar-volume>"; + label-volume = " .) "; + label-muted = " .) mute"; + label-volume-foreground = colors.${theme}.foreground; + format-muted-foreground = colors.${theme}.foreground; + bar-volume-foreground-0 = colors.${theme}.foreground; + bar-volume-foreground-1 = colors.${theme}.foreground; + bar-volume-foreground-2 = colors.${theme}.foreground; + bar-volume-foreground-3 = colors.${theme}.foreground; + bar-volume-foreground-4 = colors.${theme}.foreground; + bar-volume-foreground-5 = colors.${theme}.foreground; + bar-volume-foreground-6 = colors.${theme}.foreground; + bar-volume-gradient = true; + bar-volume-indicator = "•"; + bar-volume-fill = "•"; + bar-volume-empty = "·"; + bar-volume-empty-foreground = colors.${theme}.foreground; + }; + "module/ethernet" = { + type = "internal/network"; + interface = "enp1s0"; + label-connected = "eth up: %upspeed:9% down: %downspeed%"; + label-disconnected = "no eth"; + }; + "module/wifi" = { + type = "internal/network"; + interface = "wlan1"; + label-connected = "wifi up: %upspeed% down: %downspeed%"; + label-disconnected = "no wifi"; + }; + "module/cpu" = { + type = "internal/cpu"; + interval = 3; + format-padding = 1; + format = "<label> <ramp-coreload>"; + label = " %percentage:2%%"; + ramp-coreload-0 = "▂"; + ramp-coreload-1 = "▃"; + ramp-coreload-2 = "▄"; + ramp-coreload-3 = "▅"; + ramp-coreload-4 = "▆"; + ramp-coreload-5 = "▇"; + ramp-coreload-0-foreground = colors.${theme}.foreground; + ramp-coreload-1-foreground = colors.${theme}.foreground; + ramp-coreload-2-foreground = colors.${theme}.foreground; + ramp-coreload-3-foreground = colors.${theme}.foreground; + ramp-coreload-4-foreground = colors.${theme}.foreground; + ramp-coreload-5-foreground = colors.${theme}.highlight; + }; + "module/temp" = { + type = "internal/temperature"; + interval = 3; + thermal-zone = 0; + warn-temperature = 70; + format = "<ramp> <label>"; + format-padding = 1; + label = "%temperature-c%"; + ramp-0 = "_"; + ramp-1 = "."; + ramp-2 = ":"; + ramp-3 = "|"; + ramp-4 = "!!"; + ramp-0-foreground = colors.${theme}.foreground; + ramp-1-foreground = colors.${theme}.foreground; + ramp-2-foreground = colors.${theme}.foreground; + ramp-3-foreground = colors.${theme}.foreground; + ramp-4-foreground = colors.${theme}.highlight; + format-warn = "<label-warn>"; + label-warn = " %temperature-c%"; + label-warn-padding = 1; + label-warn-foreground = colors.${theme}.highlight; + }; + "module/mem" = { + type = "internal/memory"; + interval = 3; + format = "<label>"; + label-padding = 1; + label = " |[]| %percentage_used%%"; + }; + }; + script = '' + polybar top & + ''; + }; + + dunst = { + enable = true; + settings = { + global = { + geometry = "320x5-10+30"; + transparency = 0; + frame_color = colors."${theme}".highlight; + frame_width = 3; # same as xmonad border + separator_color = "frame"; + font = "Fira Sans"; + background = colors."${theme}".background; + foreground = colors."${theme}".foreground; + padding = 10; + horizontal_padding = 10; + word_wrap = "yes"; + markup = "full"; + format = "<b>%s</b>\\n%b\\n"; + }; + + urgency_normal = { + background = colors."${theme}".background; + foreground = colors."${theme}".foreground; + timeout = 10; + }; + }; + }; + + redshift = { + enable = true; + latitude = "40.80"; + longitude = "-81.52"; + temperature = { + # orange = 1000, white = 5000 + day = 5000; + night = 2300; + }; + }; + + random-background = { + enable = true; + enableXinerama = true; + imageDirectory = "%h/wallpaper"; + interval = "5m"; + }; + + gpg-agent = { + enable = true; + enableScDaemon = true; # smart card support + defaultCacheTtl = 7200; # 2 hours + maxCacheTtl = 86400; # 24 hours + enableSshSupport = false; + enableExtraSocket = true; + verbose = true; + pinentryFlavor = "curses"; + extraConfig = '' + allow-emacs-pinentry + # StreamLocalBindUnlink yes + # RemoteForward /home/ben/.gnupg/S.gpg-agent /home/ben/.gnupg/S.gpg-agent.extra + ''; + }; + }; + + xsession = { + enable = true; + scriptPath = ".hm-xsession"; + pointerCursor = { + package = pkgs.vanilla-dmz; + name = "Vanilla-DMZ"; + }; + windowManager = { + xmonad = { + enable = true; + extraPackages = xmonadPackages; + enableContribAndExtras = true; + config = ./xmonad.hs; + }; + }; + }; + + programs = { + git.signing.signByDefault = true; + qutebrowser = { + enable = true; + settings = { + "colors.webpage.darkmode.enabled" = + if theme == "dark" then true else false; + + "content.user_stylesheets" = "~/.userstyles.css"; # generated in common.nix + + # attempting to fix gl rendering + "qt.force_software_rendering" = "qt-quick"; + #"backend" = "webkit"; + }; + }; + + chromium = { + enable = true; + }; + + rofi = { + enable = true; + }; + }; + + systemd.user = { + services = { + "gpg-refresh".Service.ExecStart = "${pkgs.gnupg}/bin/gpg --refresh"; + # make it the same as 'systemctl show mpd | grep LimitMEMLOCK" + # might not be necessary? + #mpd.Service.LimitMEMLOCK = "2085444096"; + "get-calendars".Service = { + Type = "oneshot"; + ExecStart = + map + ({id, name}: "${pkgs.curl}/bin/curl -s --netrc https://cal.simatime.com/ben/${id} --output ${homedir}/calendars/${name}.ical") + [ + {id = "D2A3E843-2D61-4F77-8BF9-D2A90C291B78"; name = "schedule";} + {id = "7b8c1220-fdda-b77c-4b1a-b805fdec7aac"; name = "calendar";} + ]; + }; + }; + timers = { + "gpg-refresh" = { + Install.WantedBy = ["timers.target"]; + Timer.OnCalendar = "daily"; + }; + "get-calendars" = { + Install.WantedBy = ["timers.target"]; + Timer.OnCalendar = "minutely"; + }; + }; + }; +} diff --git a/lib/packages.nix b/lib/packages.nix index e74697a..680eccd 100644 --- a/lib/packages.nix +++ b/lib/packages.nix @@ -35,6 +35,7 @@ entr eternal-terminal expect fd +figlet file font-awesome_5 git-lfs |