summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/common.nix1
-rw-r--r--lib/emacs-packages.nix2
-rw-r--r--lib/linux.nix464
-rw-r--r--lib/packages.nix1
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