From fa47b22aa64c86dc369fdc0cbb60e90eaeca1e75 Mon Sep 17 00:00:00 2001 From: Ben Sima Date: Fri, 9 Nov 2018 11:10:58 -0800 Subject: Machine-specific home.nix, install from git repo instead of tarball --- .gitmodules | 3 + common.nix | 303 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ home-manager | 1 + home.nix | 303 ----------------------------------------------------------- install.sh | 18 ++-- linux.nix | 5 + 6 files changed, 321 insertions(+), 312 deletions(-) create mode 100644 common.nix create mode 160000 home-manager delete mode 100644 home.nix create mode 100644 linux.nix diff --git a/.gitmodules b/.gitmodules index 4ca08de..fbea7c8 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +1,6 @@ [submodule "xresources"] path = xresources url = git@github.com:bsima/xresources.git +[submodule "home-manager"] + path = home-manager + url = git@github.com:rycee/home-manager.git diff --git a/common.nix b/common.nix new file mode 100644 index 0000000..f118b39 --- /dev/null +++ b/common.nix @@ -0,0 +1,303 @@ +{ pkgs, ... }: + +let + solarized-xresources = ./xresources; + homedir = builtins.getEnv "HOME"; +in +{ + accounts = { + email = { + maildirBasePath = "${homedir}/Mail"; + accounts = { + "ben@bsima.me" = { + primary = true; + realName = "Ben Sima"; + address = "ben@bsima.me"; + folders = { + inbox = "INBOX"; + }; + imap = { + host = "mail.bsima.me"; + port = 993; + }; + smtp = { + host = "mail.bsima.me"; + port = 587; + }; + userName = "ben@bsima.me"; + mbsync = { + enable = true; + create = "both"; + expunge = "none"; + }; + notmuch.enable = true; + msmtp.enable = false; + passwordCommand = "pass bnet/helium/mail/ben"; + }; + }; + }; + }; + home = { + packages = import ./packages.nix { inherit pkgs; }; + sessionVariables = { + EDITOR = "vim"; + LANG = "en_US.UTF-8"; + PATH = "${homedir}/bin:${homedir}/.cabal/bin:${homedir}/.local/bin:$PATH"; + PAGER = "less"; + }; + file = { + mutt = { + text = (builtins.readFile ./muttrc) + + (builtins.readFile ./mutt/solarized.muttrc); + target = ".muttrc"; + }; + mailcap = { + source = ./mailcap; + target = ".mailcap"; + }; + tmux = { + source = ./tmux; + target = ".tmux.conf"; + }; + }; + }; + + fonts.fontconfig.enableProfileFonts = true; + + xresources = { + properties = { + "XTerm*font" = "*-fixed-*-*-*-*-*"; + "XTerm*faceName" = "mononoki"; + "XTerm*faceSize" = "10"; + "XTerm*termName" = "xterm-256color"; + "XTerm*metaSendsEscape" = true; + }; + extraConfig = builtins.readFile(solarized-xresources + "/Xresources.dark"); + }; + + services = { + network-manager-applet.enable = false; + + polybar = { + enable = false; + config = { + "bar/top" = { + font-0 = "mononoki:size-10"; + monitor = "\${env:MONITOR:eDP1}"; + monitor-fallback = "HDMI1"; + width = "100%"; + height = "2%"; + radius = 0; + background = "#fdf6e3"; # solarized base3 + foreground = "#657b83"; # solarized base00 + tray-position = "right"; + tray-detached = false; + tray-maxsize = 16; + tray-transparent = false; + tray-background = "#fdf6e3"; + tray-offset-x = 0; + tray-offset-y = 0; + tray-padding = 0; + tray-scale = 1.0; + module-margin = 4; + modules-center = "date"; + modules-right = "battery"; + }; + "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/ewmh" = { + type = "internal/xworkspaces"; + pin-workspaces = true; + enable-click = true; + enable-scroll = false; + }; + }; + script = '' + #!/usr/bin/env sh + systemctl --user daemon-reload + polybar top & + ''; + }; + + taffybar = { + enable = false; + }; + + redshift = { + enable = false; + latitude = "33.044444"; + longitude = "-117.271667"; + }; + + gpg-agent = { + enable = true; + defaultCacheTtl = 600; + enableSshSupport = true; + extraConfig = '' + allow-emacs-pinentry + pinentry-program /home/ben/.nix-profile/bin/pinentry-tty + ''; + }; + }; + + xsession = { + enable = false; + windowManager = { + xmonad = { + enable = false; + extraPackages = hpkgs: [ + hpkgs.xmonad-contrib + hpkgs.xmonad-extras + hpkgs.monad-logger + hpkgs.taffybar + ]; + enableContribAndExtras = true; + config = ./xmonad.hs; + }; + }; + }; + + programs = { + home-manager = { + enable = true; + path = https://github.com/rycee/home-manager/archive/release-18.03.tar.gz; + }; + + direnv = { + enable = true; + }; + + vim = { + enable = true; + plugins = [ + "ctrlp" + "fugitive" + "editorconfig-vim" + "gitgutter" + "surround" + "vim-colorschemes" + ]; + extraConfig = builtins.readFile ./vimrc; + }; + + git = { + enable = true; + userName = "Ben Sima"; + userEmail = "ben@bsima.me"; + ignores = [ "*~" "*.swp" ]; + package = pkgs.gitAndTools.gitFull; + aliases = { + authors = "shortlog -s -n"; + }; + extraConfig = '' + [push] + default = simple + + [commit] + template = ~/.config/nixpkgs/git-commit-template + + [sendemail] + smtpuser = ben@bsima.me + smptserverport = 587 + smptserver = mail.bsima.me + chainreplyto = false + composeencoding = UTF-8 + ''; + }; + + bash = { + enable = true; + initExtra = '' + DIR=~/.nix-profile/etc/profile.d + [[ -f "$DIR/nix.sh" ]] && . "$DIR/nix.sh" + [[ -f "$DIR/hm-session-vars.sh" ]] && . "$DIR/hm-session-vars.sh" + ''; + shellAliases = { + #z = "fasd_cd -d"; # cd, same functionality as j in autojump + #zz = "fasd_cd -d -i"; # cd with interactive selection + a = "fasd -a"; # any + add = "git add --ignore-removal"; + ci = "git commit"; + d = "fasd -d"; # directory + day = "date +%a"; + ddate = "date +%Y.%m.%d"; + dday = "date +%A"; + et = "emacs -nw"; # emacs in a terminal + f = "fasd -f"; # file + fetch = "git fetch"; + g = "grep -in"; + ga = "git add -A"; + gb = "git branch"; + gc = "git commit"; + gca = "git commit -a"; + gco = "git checkout"; + gd = "git diff"; + gl = "git pull --prune"; + glog = ''git log --decorate --all --graph --pretty=format:"%Cred%h%Creset %an: %s - %Creset %C(yellow)%d%Creset %Cgreen(%cr)%Creset" --abbrev-commit --date=relative''; + gp = "git push origin HEAD"; + gs = "git status -sb"; + hs = "home-manager switch"; + ll = "ls -l"; + pull = "git pull"; + push = "git push"; + rm = "rm -i"; + s = "fasd -si"; # show / search / select + sd = "fasd -sid"; # interactive directory selection + sf = "fasd -sif"; # interactive file selection + showpath = "echo $PATH | sed 's/:/\n/g'"; + tdate = "date +%Y.%m.%d..%H.%M"; + ttime = "date +%H.%M"; + typeless = "history | tail -n 20000 | sed 's/.* //' | sort | uniq -c | sort -g | tail -n 100"; + v = "vim"; + "v." = "vim ."; + vimdiff = "vim -d"; + }; + }; + + emacs = { + enable = true; + extraPackages = epkgs: import ./emacs-packages.nix { inherit epkgs; }; + }; + + firefox = { + enable = true; + }; + + notmuch = { + enable = true; + new.tags = [ "unread" "inbox" ]; + hooks = { + preNew = '' + msmtp-queue -r + mbsync --all + ''; + postNew = builtins.readFile ./notmuch-hook.sh; + }; + extraConfig = { + search = { + exclude_tags = "deleted;spam;"; + }; + }; + }; + + mbsync = { + enable = true; + }; + + msmtp = { + enable = false; + extraConfig = builtins.readFile ./msmtprc; + }; + }; +} diff --git a/home-manager b/home-manager new file mode 160000 index 0000000..fafd60f --- /dev/null +++ b/home-manager @@ -0,0 +1 @@ +Subproject commit fafd60f12848b62d09062b9fe0344e6b00d4764e diff --git a/home.nix b/home.nix deleted file mode 100644 index f118b39..0000000 --- a/home.nix +++ /dev/null @@ -1,303 +0,0 @@ -{ pkgs, ... }: - -let - solarized-xresources = ./xresources; - homedir = builtins.getEnv "HOME"; -in -{ - accounts = { - email = { - maildirBasePath = "${homedir}/Mail"; - accounts = { - "ben@bsima.me" = { - primary = true; - realName = "Ben Sima"; - address = "ben@bsima.me"; - folders = { - inbox = "INBOX"; - }; - imap = { - host = "mail.bsima.me"; - port = 993; - }; - smtp = { - host = "mail.bsima.me"; - port = 587; - }; - userName = "ben@bsima.me"; - mbsync = { - enable = true; - create = "both"; - expunge = "none"; - }; - notmuch.enable = true; - msmtp.enable = false; - passwordCommand = "pass bnet/helium/mail/ben"; - }; - }; - }; - }; - home = { - packages = import ./packages.nix { inherit pkgs; }; - sessionVariables = { - EDITOR = "vim"; - LANG = "en_US.UTF-8"; - PATH = "${homedir}/bin:${homedir}/.cabal/bin:${homedir}/.local/bin:$PATH"; - PAGER = "less"; - }; - file = { - mutt = { - text = (builtins.readFile ./muttrc) + - (builtins.readFile ./mutt/solarized.muttrc); - target = ".muttrc"; - }; - mailcap = { - source = ./mailcap; - target = ".mailcap"; - }; - tmux = { - source = ./tmux; - target = ".tmux.conf"; - }; - }; - }; - - fonts.fontconfig.enableProfileFonts = true; - - xresources = { - properties = { - "XTerm*font" = "*-fixed-*-*-*-*-*"; - "XTerm*faceName" = "mononoki"; - "XTerm*faceSize" = "10"; - "XTerm*termName" = "xterm-256color"; - "XTerm*metaSendsEscape" = true; - }; - extraConfig = builtins.readFile(solarized-xresources + "/Xresources.dark"); - }; - - services = { - network-manager-applet.enable = false; - - polybar = { - enable = false; - config = { - "bar/top" = { - font-0 = "mononoki:size-10"; - monitor = "\${env:MONITOR:eDP1}"; - monitor-fallback = "HDMI1"; - width = "100%"; - height = "2%"; - radius = 0; - background = "#fdf6e3"; # solarized base3 - foreground = "#657b83"; # solarized base00 - tray-position = "right"; - tray-detached = false; - tray-maxsize = 16; - tray-transparent = false; - tray-background = "#fdf6e3"; - tray-offset-x = 0; - tray-offset-y = 0; - tray-padding = 0; - tray-scale = 1.0; - module-margin = 4; - modules-center = "date"; - modules-right = "battery"; - }; - "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/ewmh" = { - type = "internal/xworkspaces"; - pin-workspaces = true; - enable-click = true; - enable-scroll = false; - }; - }; - script = '' - #!/usr/bin/env sh - systemctl --user daemon-reload - polybar top & - ''; - }; - - taffybar = { - enable = false; - }; - - redshift = { - enable = false; - latitude = "33.044444"; - longitude = "-117.271667"; - }; - - gpg-agent = { - enable = true; - defaultCacheTtl = 600; - enableSshSupport = true; - extraConfig = '' - allow-emacs-pinentry - pinentry-program /home/ben/.nix-profile/bin/pinentry-tty - ''; - }; - }; - - xsession = { - enable = false; - windowManager = { - xmonad = { - enable = false; - extraPackages = hpkgs: [ - hpkgs.xmonad-contrib - hpkgs.xmonad-extras - hpkgs.monad-logger - hpkgs.taffybar - ]; - enableContribAndExtras = true; - config = ./xmonad.hs; - }; - }; - }; - - programs = { - home-manager = { - enable = true; - path = https://github.com/rycee/home-manager/archive/release-18.03.tar.gz; - }; - - direnv = { - enable = true; - }; - - vim = { - enable = true; - plugins = [ - "ctrlp" - "fugitive" - "editorconfig-vim" - "gitgutter" - "surround" - "vim-colorschemes" - ]; - extraConfig = builtins.readFile ./vimrc; - }; - - git = { - enable = true; - userName = "Ben Sima"; - userEmail = "ben@bsima.me"; - ignores = [ "*~" "*.swp" ]; - package = pkgs.gitAndTools.gitFull; - aliases = { - authors = "shortlog -s -n"; - }; - extraConfig = '' - [push] - default = simple - - [commit] - template = ~/.config/nixpkgs/git-commit-template - - [sendemail] - smtpuser = ben@bsima.me - smptserverport = 587 - smptserver = mail.bsima.me - chainreplyto = false - composeencoding = UTF-8 - ''; - }; - - bash = { - enable = true; - initExtra = '' - DIR=~/.nix-profile/etc/profile.d - [[ -f "$DIR/nix.sh" ]] && . "$DIR/nix.sh" - [[ -f "$DIR/hm-session-vars.sh" ]] && . "$DIR/hm-session-vars.sh" - ''; - shellAliases = { - #z = "fasd_cd -d"; # cd, same functionality as j in autojump - #zz = "fasd_cd -d -i"; # cd with interactive selection - a = "fasd -a"; # any - add = "git add --ignore-removal"; - ci = "git commit"; - d = "fasd -d"; # directory - day = "date +%a"; - ddate = "date +%Y.%m.%d"; - dday = "date +%A"; - et = "emacs -nw"; # emacs in a terminal - f = "fasd -f"; # file - fetch = "git fetch"; - g = "grep -in"; - ga = "git add -A"; - gb = "git branch"; - gc = "git commit"; - gca = "git commit -a"; - gco = "git checkout"; - gd = "git diff"; - gl = "git pull --prune"; - glog = ''git log --decorate --all --graph --pretty=format:"%Cred%h%Creset %an: %s - %Creset %C(yellow)%d%Creset %Cgreen(%cr)%Creset" --abbrev-commit --date=relative''; - gp = "git push origin HEAD"; - gs = "git status -sb"; - hs = "home-manager switch"; - ll = "ls -l"; - pull = "git pull"; - push = "git push"; - rm = "rm -i"; - s = "fasd -si"; # show / search / select - sd = "fasd -sid"; # interactive directory selection - sf = "fasd -sif"; # interactive file selection - showpath = "echo $PATH | sed 's/:/\n/g'"; - tdate = "date +%Y.%m.%d..%H.%M"; - ttime = "date +%H.%M"; - typeless = "history | tail -n 20000 | sed 's/.* //' | sort | uniq -c | sort -g | tail -n 100"; - v = "vim"; - "v." = "vim ."; - vimdiff = "vim -d"; - }; - }; - - emacs = { - enable = true; - extraPackages = epkgs: import ./emacs-packages.nix { inherit epkgs; }; - }; - - firefox = { - enable = true; - }; - - notmuch = { - enable = true; - new.tags = [ "unread" "inbox" ]; - hooks = { - preNew = '' - msmtp-queue -r - mbsync --all - ''; - postNew = builtins.readFile ./notmuch-hook.sh; - }; - extraConfig = { - search = { - exclude_tags = "deleted;spam;"; - }; - }; - }; - - mbsync = { - enable = true; - }; - - msmtp = { - enable = false; - extraConfig = builtins.readFile ./msmtprc; - }; - }; -} diff --git a/install.sh b/install.sh index a9bf4d8..1b40c4e 100755 --- a/install.sh +++ b/install.sh @@ -1,20 +1,20 @@ #!/usr/bin/env bash -# -# Downloads and installs home-manager, then symlinks this directory where -# home-manager expects it. -HM_PATH=https://github.com/rycee/home-manager/archive/master.tar.gz +nix-shell ./home-manager -A install -nix-shell $HM_PATH -A install +mkdir -p ~/.config/nixpkgs -# macOS doesn't have a ~/.config directory by default -mkdir -p ~/.config +NIXDIR="$HOME/.config/nixpkgs" -[[ -L ~/config ]] && ln -s ~/config/home.nix ~/.config/nixpkgs/home.nix +HOMEFILE="$NIXDIR/home.nix" +NIXFILE="$(pwd)/$(uname | tr A-Z a-z).nix" + +[[ -e "$HOMEFILE" ]] || ln -s "$NIXFILE" "$HOMEFILE" +[[ -e "$NIXDIR/config.nix" ]] || ln -s "$(pwd)/config.nix" "$NIXDIR/config.nix" # The notmuch config location is by default ~/.notmuch-config, but home-manager # puts it at ~/.config/notmuch/notmuchrc (which makes sense) and then sets # NOTMUCH_CONFIG. However, if a program for some reason doesn't read # NOTMUCH_CONFIG (emacs), then it won't find the right config file, so I # override with a symlink. -[[ -L ~/.notmuch-config ]] && ln -s ~/.config/notmuch/notmuchrc ~/.notmuch-config +[[ -e ~/.notmuch-config ]] || ln -s ~/.config/notmuch/notmuchrc ~/.notmuch-config diff --git a/linux.nix b/linux.nix new file mode 100644 index 0000000..516d8e1 --- /dev/null +++ b/linux.nix @@ -0,0 +1,5 @@ +{ pkgs, ... }: + +{ + imports = [ ./common.nix ]; +} -- cgit v1.2.3