Complete rewrite
This commit is contained in:
parent
59def1c531
commit
b90b0894f0
2
.gitignore
vendored
Normal file
2
.gitignore
vendored
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
secrets.nix
|
||||||
|
result
|
|
@ -1,17 +1,4 @@
|
||||||
#!/usr/bin/env zsh
|
#!/usr/bin/env zsh
|
||||||
|
|
||||||
if [[ $OSTYPE == darwin* ]]; then
|
alias e='emacsclient -n'
|
||||||
alias emacs='emacs -nw'
|
|
||||||
|
|
||||||
e() { # Emacs version of v
|
|
||||||
if pgrep Emacs 2>&1 >/dev/null; then
|
|
||||||
emacsclient -n $@
|
|
||||||
else
|
|
||||||
/Applications/Emacs.app/Contents/MacOS/Emacs $@ &
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
else
|
|
||||||
alias e='emacsclient -n'
|
|
||||||
fi
|
|
||||||
|
|
||||||
ediff() { e --eval "(ediff-files \"$1\" \"$2\")"; }
|
ediff() { e --eval "(ediff-files \"$1\" \"$2\")"; }
|
||||||
|
|
|
@ -1,3 +0,0 @@
|
||||||
#!/usr/bin/env zsh
|
|
||||||
|
|
||||||
export PATH="$HOME/.emacs.d/bin:$PATH"
|
|
|
@ -1,2 +0,0 @@
|
||||||
export MPD_HOME="$XDG_CONFIG_HOME/mpd"
|
|
||||||
export NCMPCPP_HOME="$XDG_CONFIG_HOME/ncmpcpp"
|
|
|
@ -1,5 +0,0 @@
|
||||||
#!/usr/bin/env zsh
|
|
||||||
|
|
||||||
alias rs=rustc
|
|
||||||
alias rsp=rustup
|
|
||||||
alias ca=cargo
|
|
|
@ -1,5 +0,0 @@
|
||||||
#!/usr/bin/env zsh
|
|
||||||
|
|
||||||
export CARGO_HOME="$XDG_DATA_HOME/cargo"
|
|
||||||
export RUSTUP_HOME="$XDG_DATA_HOME/rustup"
|
|
||||||
export PATH="$CARGO_HOME/bin:$PATH"
|
|
|
@ -12,10 +12,10 @@ super + apostrophe
|
||||||
|
|
||||||
# focus/swap the node in the given direction
|
# focus/swap the node in the given direction
|
||||||
super + {_,ctrl +}{h,j,k,l}
|
super + {_,ctrl +}{h,j,k,l}
|
||||||
~/.config/bspwm/bin/bspc-focus {_,-m }{west,south,north,east}
|
bspc-focus {_,-m }{west,south,north,east}
|
||||||
|
|
||||||
super + shift + {_,ctrl +}{h,j,k,l}
|
super + shift + {_,ctrl +}{h,j,k,l}
|
||||||
~/.config/bspwm/bin/bspc-swap {_,-m }{west,south,north,east}
|
bspc-swap {_,-m }{west,south,north,east}
|
||||||
|
|
||||||
super + {_,shift +}{1-9,0}
|
super + {_,shift +}{1-9,0}
|
||||||
bspc {desktop -f,node -d} {1-9,10}
|
bspc {desktop -f,node -d} {1-9,10}
|
||||||
|
@ -30,13 +30,13 @@ super + shift + grave
|
||||||
emacsclient -e '(open-scratch-frame)'
|
emacsclient -e '(open-scratch-frame)'
|
||||||
|
|
||||||
super + space
|
super + space
|
||||||
~/.config/rofi/bin/rofi-appmenu
|
rofi-appmenu
|
||||||
|
|
||||||
super + Tab
|
super + Tab
|
||||||
~/.config/rofi/bin/rofi-windowmenu
|
rofi-windowmenu
|
||||||
|
|
||||||
super + backslash
|
super + backslash
|
||||||
~/.config/rofi/bin/rofi-passmenu
|
rofi-passmenu
|
||||||
|
|
||||||
super + Escape
|
super + Escape
|
||||||
pkill -USR1 -x sxhkd
|
pkill -USR1 -x sxhkd
|
||||||
|
@ -56,11 +56,14 @@ super + {_,ctrl + }f
|
||||||
#
|
#
|
||||||
## Media keys
|
## Media keys
|
||||||
|
|
||||||
Print # screenshot region
|
# screenshot region
|
||||||
|
Print
|
||||||
scrcap
|
scrcap
|
||||||
super + Print # screencast region to mp4
|
# screencast region to mp4
|
||||||
|
super + Print
|
||||||
scrrec -s ~/recordings/$(date +%F-%T).mp4
|
scrrec -s ~/recordings/$(date +%F-%T).mp4
|
||||||
super + ctrl + Print # screencast region to gif
|
# screencast region to gif
|
||||||
|
super + ctrl + Print
|
||||||
scrrec -s ~/recordings/$(date +%F-%T).gif
|
scrrec -s ~/recordings/$(date +%F-%T).gif
|
||||||
|
|
||||||
XF86MonBrightnessUp
|
XF86MonBrightnessUp
|
||||||
|
|
|
@ -1,13 +1,8 @@
|
||||||
export ZGEN_DIR="$XDG_CACHE_HOME/zgen"
|
export ZGEN_DIR="$XDG_CACHE_HOME/zgen"
|
||||||
export ZGEN_SOURCE="$ZGEN_DIR/zgen.zsh"
|
export ZGEN_SOURCE="$ZGEN_DIR/zgen.zsh"
|
||||||
|
|
||||||
for dir in $XDG_CONFIG_HOME/*/bin(N); do
|
## TODO
|
||||||
export PATH="$dir:$PATH"
|
source $ZDOTDIR/extra.zshenv
|
||||||
done
|
|
||||||
|
|
||||||
for file in $XDG_CONFIG_HOME/zsh/rc.d/env.*.zsh(N); do
|
|
||||||
source $file
|
|
||||||
done
|
|
||||||
|
|
||||||
# If you have host-local configuration, this is where you'd put it
|
# If you have host-local configuration, this is where you'd put it
|
||||||
[ -f ~/.config/zsh/env ] && source ~/.config/zsh/env
|
[ -f ~/.zshenv ] && source ~/.zshenv
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
if [[ ! -d "$ZGEN_DIR" ]]; then
|
[ -d "$ZGEN_DIR" ] || \
|
||||||
git clone https://github.com/tarjoilija/zgen "$ZGEN_DIR"
|
git clone https://github.com/tarjoilija/zgen "$ZGEN_DIR"
|
||||||
fi
|
|
||||||
source $ZGEN_SOURCE
|
source $ZGEN_SOURCE
|
||||||
|
|
||||||
if ! zgen saved; then
|
if ! zgen saved; then
|
||||||
|
@ -12,7 +11,7 @@ if ! zgen saved; then
|
||||||
zgen load zsh-users/zsh-completions src
|
zgen load zsh-users/zsh-completions src
|
||||||
zgen load junegunn/fzf shell
|
zgen load junegunn/fzf shell
|
||||||
|
|
||||||
if [[ -z $SSH_CONNECTION ]]; then
|
if [ -z "$SSH_CONNECTION" ]; then
|
||||||
zgen load zdharma/fast-syntax-highlighting
|
zgen load zdharma/fast-syntax-highlighting
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
@ -25,9 +24,6 @@ if [[ $TERM != dumb ]]; then
|
||||||
source $ZDOTDIR/keybinds.zsh
|
source $ZDOTDIR/keybinds.zsh
|
||||||
source $ZDOTDIR/completion.zsh
|
source $ZDOTDIR/completion.zsh
|
||||||
source $ZDOTDIR/aliases.zsh
|
source $ZDOTDIR/aliases.zsh
|
||||||
for file in $XDG_CONFIG_HOME/zsh/rc.d/aliases.*.zsh(N); do
|
|
||||||
source $file
|
|
||||||
done
|
|
||||||
|
|
||||||
##
|
##
|
||||||
function _cache {
|
function _cache {
|
||||||
|
@ -49,16 +45,15 @@ if [[ $TERM != dumb ]]; then
|
||||||
export FZF_CTRL_T_COMMAND="$FZF_DEFAULT_COMMAND"
|
export FZF_CTRL_T_COMMAND="$FZF_DEFAULT_COMMAND"
|
||||||
export FZF_ALT_C_COMMAND="fd -t d . $HOME"
|
export FZF_ALT_C_COMMAND="fd -t d . $HOME"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
_cache fasd --init posix-alias zsh-{hook,{c,w}comp{,-install}}
|
_cache fasd --init posix-alias zsh-{hook,{c,w}comp{,-install}}
|
||||||
_cache direnv hook zsh
|
|
||||||
|
|
||||||
|
## TODO
|
||||||
|
source $ZDOTDIR/extra.zshrc
|
||||||
|
|
||||||
##
|
##
|
||||||
autoload -Uz compinit && compinit -u -d $ZSH_CACHE/zcompdump
|
autoload -Uz compinit && compinit -u -d $ZSH_CACHE/zcompdump
|
||||||
autopair-init
|
autopair-init
|
||||||
|
|
||||||
|
|
||||||
# If you have host-local configuration, this is where you'd put it
|
# If you have host-local configuration, this is where you'd put it
|
||||||
[ -f ~/.config/zsh/rc ] && source ~/.config/zsh/rc
|
[ -f ~/.zshrc ] && source ~/.zshrc
|
||||||
fi
|
fi
|
||||||
|
|
|
@ -13,13 +13,6 @@ alias mv='mv -i'
|
||||||
|
|
||||||
alias mkdir='mkdir -p'
|
alias mkdir='mkdir -p'
|
||||||
alias wget='wget -c'
|
alias wget='wget -c'
|
||||||
alias rg='noglob rg'
|
|
||||||
alias bc='bc -lq'
|
|
||||||
|
|
||||||
alias grep='grep --color=auto'
|
|
||||||
alias fgrep='fgrep --color=auto'
|
|
||||||
alias egrep='egrep --color=auto'
|
|
||||||
|
|
||||||
if command -v exa >/dev/null; then
|
if command -v exa >/dev/null; then
|
||||||
alias exa='exa --group-directories-first'
|
alias exa='exa --group-directories-first'
|
||||||
alias l='exa -1'
|
alias l='exa -1'
|
||||||
|
|
|
@ -1,8 +1,6 @@
|
||||||
# Stop TRAMP (in Emacs) from hanging or term/shell from echoing back commands
|
# Stop TRAMP (in Emacs) from hanging or term/shell from echoing back commands
|
||||||
if [[ $TERM == dumb || -n $INSIDE_EMACS ]]; then
|
if [[ $TERM == dumb || -n $INSIDE_EMACS ]]; then
|
||||||
unsetopt zle
|
unsetopt zle prompt_cr prompt_subst
|
||||||
unsetopt prompt_cr
|
|
||||||
unsetopt prompt_subst
|
|
||||||
whence -w precmd >/dev/null && unfunction precmd
|
whence -w precmd >/dev/null && unfunction precmd
|
||||||
whence -w preexec >/dev/null && unfunction preexec
|
whence -w preexec >/dev/null && unfunction preexec
|
||||||
PS1='$ '
|
PS1='$ '
|
||||||
|
|
|
@ -1,119 +0,0 @@
|
||||||
# Ao -- my home development server
|
|
||||||
|
|
||||||
{ config, ... }:
|
|
||||||
|
|
||||||
{
|
|
||||||
imports = [
|
|
||||||
./. # import common settings
|
|
||||||
|
|
||||||
./modules/services/ssh.nix
|
|
||||||
./modules/services/nginx.nix
|
|
||||||
./modules/services/gitea.nix
|
|
||||||
./modules/services/syncthing.nix
|
|
||||||
|
|
||||||
./modules/shell/git.nix
|
|
||||||
./modules/shell/zsh.nix
|
|
||||||
];
|
|
||||||
|
|
||||||
time.timeZone = "America/Toronto";
|
|
||||||
|
|
||||||
networking.hostName = "ao";
|
|
||||||
networking.networkmanager.enable = true;
|
|
||||||
|
|
||||||
# syncthing
|
|
||||||
services.syncthing.guiAddress = "192.168.1.10:8384";
|
|
||||||
networking.firewall.allowedTCPPorts = [ 8384 ];
|
|
||||||
|
|
||||||
# nginx hosts
|
|
||||||
services.nginx = {
|
|
||||||
user = "hlissner";
|
|
||||||
virtualHosts = {
|
|
||||||
"v0.io" = {
|
|
||||||
default = true;
|
|
||||||
enableACME = true;
|
|
||||||
forceSSL = true;
|
|
||||||
root = "/var/www/v0.io";
|
|
||||||
};
|
|
||||||
"dl.v0.io" = {
|
|
||||||
enableACME = true;
|
|
||||||
addSSL = true;
|
|
||||||
root = "/var/www/dl.v0.io";
|
|
||||||
locations."~* \.(?:ico|css|js|gif|jpe?g|png|mp4)$".extraConfig = ''
|
|
||||||
expires 30d;
|
|
||||||
add_header Pragma public;
|
|
||||||
add_header Cache-Control public;
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
"git.v0.io" = {
|
|
||||||
enableACME = true;
|
|
||||||
forceSSL = true;
|
|
||||||
locations."/".proxyPass = http://127.0.0.1:3000;
|
|
||||||
};
|
|
||||||
"plex.v0.io" = {
|
|
||||||
http2 = true; # more performant for streaming
|
|
||||||
enableACME = true;
|
|
||||||
forceSSL = true;
|
|
||||||
extraConfig = ''
|
|
||||||
# Some players don't reopen a socket and playback stops totally
|
|
||||||
# instead of resuming after an extended pause
|
|
||||||
send_timeout 100m;
|
|
||||||
|
|
||||||
# Intentionally not hardened for security for player support and
|
|
||||||
# encryption video streams has a lot of overhead with something like
|
|
||||||
# AES-256-GCM-SHA384.
|
|
||||||
ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:ECDHE-RSA-DES-CBC3-SHA:ECDHE-ECDSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA';
|
|
||||||
|
|
||||||
# Forward real ip and host to Plex
|
|
||||||
proxy_set_header Referer $server_addr;
|
|
||||||
proxy_set_header Origin $server_addr;
|
|
||||||
|
|
||||||
# Nginx default client_max_body_size is 1MB, which breaks Camera
|
|
||||||
# Upload feature from the phones. Increasing the limit fixes the
|
|
||||||
# issue. Anyhow, if 4K videos are expected to be uploaded, the size
|
|
||||||
# might need to be increased even more
|
|
||||||
client_max_body_size 100M;
|
|
||||||
|
|
||||||
# Plex headers
|
|
||||||
proxy_set_header X-Plex-Client-Identifier $http_x_plex_client_identifier;
|
|
||||||
proxy_set_header X-Plex-Device $http_x_plex_device;
|
|
||||||
proxy_set_header X-Plex-Device-Name $http_x_plex_device_name;
|
|
||||||
proxy_set_header X-Plex-Platform $http_x_plex_platform;
|
|
||||||
proxy_set_header X-Plex-Platform-Version $http_x_plex_platform_version;
|
|
||||||
proxy_set_header X-Plex-Product $http_x_plex_product;
|
|
||||||
proxy_set_header X-Plex-Token $http_x_plex_token;
|
|
||||||
proxy_set_header X-Plex-Version $http_x_plex_version;
|
|
||||||
proxy_set_header X-Plex-Nocache $http_x_plex_nocache;
|
|
||||||
proxy_set_header X-Plex-Provides $http_x_plex_provides;
|
|
||||||
proxy_set_header X-Plex-Device-Vendor $http_x_plex_device_vendor;
|
|
||||||
proxy_set_header X-Plex-Model $http_x_plex_model;
|
|
||||||
|
|
||||||
# Buffering off send to the client as soon as the data is received
|
|
||||||
# from Plex.
|
|
||||||
proxy_buffering off;
|
|
||||||
'';
|
|
||||||
locations."= /".return = "302 https://plex.v0.io/web/index.html";
|
|
||||||
locations."/" = {
|
|
||||||
proxyWebsockets = true;
|
|
||||||
proxyPass = "http://192.168.1.13:32400";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
security.acme.certs = {
|
|
||||||
"v0.io".email = "henrik@lissner.net";
|
|
||||||
"dl.v0.io".email = "henrik@lissner.net";
|
|
||||||
"git.v0.io".email = "henrik@lissner.net";
|
|
||||||
"plex.v0.io".email = "henrik@lissner.net";
|
|
||||||
};
|
|
||||||
|
|
||||||
services.gitea = {
|
|
||||||
appName = "V-NOUGHT";
|
|
||||||
domain = "v0.io";
|
|
||||||
rootUrl = "https://git.v0.io/";
|
|
||||||
extraConfig = ''
|
|
||||||
[server]
|
|
||||||
SSH_DOMAIN = v0.io
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
}
|
|
|
@ -1,50 +0,0 @@
|
||||||
# Kuro -- my desktop
|
|
||||||
|
|
||||||
{ config, pkgs, ... }:
|
|
||||||
|
|
||||||
{
|
|
||||||
imports = [
|
|
||||||
./. # import common settings
|
|
||||||
|
|
||||||
./modules/desktop/bspwm.nix
|
|
||||||
|
|
||||||
./modules/audio/audacity.nix
|
|
||||||
./modules/audio/lmms.nix
|
|
||||||
./modules/audio/spotify.nix
|
|
||||||
./modules/browser/firefox.nix
|
|
||||||
./modules/dev
|
|
||||||
./modules/dev/rust.nix
|
|
||||||
./modules/editors/emacs.nix
|
|
||||||
./modules/editors/vim.nix
|
|
||||||
./modules/gaming/steam.nix
|
|
||||||
./modules/graphics/aseprite.nix
|
|
||||||
# ./modules/graphics/blender.nix
|
|
||||||
./modules/graphics/gimp.nix
|
|
||||||
./modules/misc/virtualbox.nix
|
|
||||||
./modules/shell/direnv.nix
|
|
||||||
./modules/shell/git.nix
|
|
||||||
./modules/shell/gnupg.nix
|
|
||||||
./modules/shell/pass.nix
|
|
||||||
./modules/shell/zsh.nix
|
|
||||||
# ./modules/video/kdenlive.nix
|
|
||||||
# ./modules/video/obs.nix
|
|
||||||
|
|
||||||
# Services
|
|
||||||
./modules/services/syncthing.nix
|
|
||||||
|
|
||||||
# Themes
|
|
||||||
./themes/aquanaut
|
|
||||||
];
|
|
||||||
|
|
||||||
networking.hostName = "kuro";
|
|
||||||
networking.networkmanager.enable = true;
|
|
||||||
|
|
||||||
time.timeZone = "America/Toronto";
|
|
||||||
services.xserver.videoDrivers = [ "nvidia" ];
|
|
||||||
|
|
||||||
# For ergodox ez
|
|
||||||
environment = {
|
|
||||||
systemPackages = [ pkgs.teensy-loader-cli ];
|
|
||||||
shellAliases.teensyload = "sudo teensy-loader-cli -w -v --mcu=atmega32u4";
|
|
||||||
};
|
|
||||||
}
|
|
|
@ -1,62 +0,0 @@
|
||||||
# Shiro -- my laptop
|
|
||||||
|
|
||||||
{ config, lib, pkgs, ... }:
|
|
||||||
|
|
||||||
let nixos-hardware = builtins.fetchTarball https://github.com/NixOS/nixos-hardware/archive/master.tar.gz;
|
|
||||||
in {
|
|
||||||
imports = [
|
|
||||||
./. # import common settings
|
|
||||||
|
|
||||||
# Hardware specific
|
|
||||||
"${nixos-hardware}/dell/xps/13-9370"
|
|
||||||
|
|
||||||
./modules/desktop/bspwm.nix
|
|
||||||
|
|
||||||
./modules/audio/spotify.nix
|
|
||||||
./modules/browser/firefox.nix
|
|
||||||
./modules/dev
|
|
||||||
./modules/graphics/aseprite.nix
|
|
||||||
./modules/graphics/gimp.nix
|
|
||||||
./modules/editors/emacs.nix
|
|
||||||
./modules/editors/vim.nix
|
|
||||||
./modules/shell/direnv.nix
|
|
||||||
./modules/shell/git.nix
|
|
||||||
./modules/shell/gnupg.nix
|
|
||||||
./modules/shell/pass.nix
|
|
||||||
./modules/shell/zsh.nix
|
|
||||||
# ./modules/video/obs.nix
|
|
||||||
|
|
||||||
#
|
|
||||||
./modules/services/syncthing.nix
|
|
||||||
|
|
||||||
# Themes
|
|
||||||
./themes/aquanaut
|
|
||||||
];
|
|
||||||
|
|
||||||
time.timeZone = "America/Toronto";
|
|
||||||
# time.timeZone = "Europe/Copenhagen";
|
|
||||||
|
|
||||||
networking.hostName = "shiro";
|
|
||||||
networking.wireless.enable = true;
|
|
||||||
|
|
||||||
# Optimize power use
|
|
||||||
environment.systemPackages = [ pkgs.acpi ];
|
|
||||||
services.tlp.enable = true;
|
|
||||||
powerManagement = {
|
|
||||||
powertop.enable = true;
|
|
||||||
cpuFreqGovernor = "ondemand";
|
|
||||||
};
|
|
||||||
|
|
||||||
# Monitor backlight control
|
|
||||||
programs.light.enable = true;
|
|
||||||
|
|
||||||
# Encrypted /home
|
|
||||||
boot.initrd.luks.devices = [
|
|
||||||
{
|
|
||||||
name = "home";
|
|
||||||
device = "/dev/nvme0n1p8";
|
|
||||||
preLVM = true;
|
|
||||||
allowDiscards = true;
|
|
||||||
}
|
|
||||||
];
|
|
||||||
}
|
|
82
default.nix
82
default.nix
|
@ -1,26 +1,31 @@
|
||||||
# Common configuration across systems. This should be required by
|
# ...
|
||||||
# configuration.$HOSTNAME.nix files.
|
|
||||||
|
|
||||||
{ pkgs, options, config, ... }:
|
|
||||||
|
|
||||||
|
device:
|
||||||
|
{ pkgs, options, lib, config, ... }:
|
||||||
{
|
{
|
||||||
imports = [
|
imports = [
|
||||||
<nixpkgs/nixos/modules/installer/scan/not-detected.nix>
|
<nixpkgs/nixos/modules/installer/scan/not-detected.nix>
|
||||||
./settings.nix
|
/etc/nixos/hardware-configuration.nix
|
||||||
|
|
||||||
|
./options/my.nix
|
||||||
|
./options/secrets.nix
|
||||||
|
./secrets.nix
|
||||||
|
"${./machines}/${device}.nix"
|
||||||
];
|
];
|
||||||
|
|
||||||
|
###
|
||||||
nix = {
|
nix = {
|
||||||
nixPath = options.nix.nixPath.default ++ [
|
nixPath = options.nix.nixPath.default ++ [
|
||||||
"config=/etc/dotfiles/config"
|
"my=/etc/dotfiles"
|
||||||
"packages=/etc/dotfiles/packages"
|
|
||||||
];
|
];
|
||||||
autoOptimiseStore = true;
|
autoOptimiseStore = true;
|
||||||
trustedUsers = [ "root" "@wheel" ];
|
trustedUsers = [ "root" ];
|
||||||
};
|
};
|
||||||
nixpkgs.config = {
|
|
||||||
# Forgive me Stallman senpai
|
|
||||||
allowUnfree = true;
|
|
||||||
|
|
||||||
|
nixpkgs.config = {
|
||||||
|
allowUnfree = true; # forgive me Stallman senpai
|
||||||
|
# Occasionally, "stable" packages are broken or incomplete, so access to the
|
||||||
|
# bleeding edge is necessary, as a last resort.
|
||||||
packageOverrides = pkgs: {
|
packageOverrides = pkgs: {
|
||||||
unstable = import <nixpkgs-unstable> {
|
unstable = import <nixpkgs-unstable> {
|
||||||
config = config.nixpkgs.config;
|
config = config.nixpkgs.config;
|
||||||
|
@ -28,61 +33,6 @@
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
# Nothing in /tmp should survive a reboot
|
|
||||||
boot.cleanTmpDir = true;
|
|
||||||
# Use simple bootloader; I prefer the on-demand BIOs boot menu
|
|
||||||
boot.loader.systemd-boot.enable = true;
|
|
||||||
boot.loader.efi.canTouchEfiVariables = true;
|
|
||||||
|
|
||||||
environment = {
|
|
||||||
systemPackages = with pkgs; [
|
|
||||||
# Just the bear necessities~
|
|
||||||
libqalculate
|
|
||||||
coreutils
|
|
||||||
git
|
|
||||||
killall
|
|
||||||
unzip
|
|
||||||
vim
|
|
||||||
wget
|
|
||||||
# Support for extra filesystems
|
|
||||||
sshfs
|
|
||||||
exfat
|
|
||||||
ntfs3g
|
|
||||||
hfsprogs
|
|
||||||
];
|
|
||||||
# These are the defaults, but some applications are buggy when these lack
|
|
||||||
# explicit values.
|
|
||||||
variables = {
|
|
||||||
XDG_CONFIG_HOME = "$HOME/.config";
|
|
||||||
XDG_CACHE_HOME = "$HOME/.cache";
|
|
||||||
XDG_DATA_HOME = "$HOME/.local/share";
|
|
||||||
XDG_BIN_HOME = "$HOME/.local/bin";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
location = (if config.time.timeZone == "America/Toronto" then {
|
|
||||||
latitude = 43.70011;
|
|
||||||
longitude = -79.4163;
|
|
||||||
} else if config.time.timeZone == "Europe/Copenhagen" then {
|
|
||||||
latitude = 55.88;
|
|
||||||
longitude = 12.5;
|
|
||||||
} else {});
|
|
||||||
|
|
||||||
# Set up hlissner user account
|
|
||||||
users.users.hlissner = {
|
|
||||||
isNormalUser = true;
|
|
||||||
uid = 1000;
|
|
||||||
extraGroups = [ "wheel" "video" "networkmanager" "vboxusers" ];
|
|
||||||
shell = pkgs.zsh;
|
|
||||||
};
|
|
||||||
|
|
||||||
home = {
|
|
||||||
xdg.enable = true;
|
|
||||||
home.file."bin" = { source = ./bin; recursive = true; };
|
|
||||||
};
|
|
||||||
|
|
||||||
networking.firewall.enable = true;
|
|
||||||
|
|
||||||
# This value determines the NixOS release with which your system is to be
|
# This value determines the NixOS release with which your system is to be
|
||||||
# compatible, in order to avoid breaking some software such as database
|
# compatible, in order to avoid breaking some software such as database
|
||||||
# servers. You should change this only after NixOS release notes say you
|
# servers. You should change this only after NixOS release notes say you
|
||||||
|
|
|
@ -2,18 +2,18 @@
|
||||||
# access to my work files from anywhere.
|
# access to my work files from anywhere.
|
||||||
|
|
||||||
{ config, ... }:
|
{ config, ... }:
|
||||||
|
|
||||||
{
|
{
|
||||||
imports = [
|
imports = [
|
||||||
./. # import common settings
|
./. # import common settings
|
||||||
|
|
||||||
./modules/services/ssh.nix
|
<my/modules/services/ssh.nix>
|
||||||
./modules/services/plex.nix
|
# ./modules/services/plex.nix
|
||||||
./modules/shell/zsh.nix
|
<my/modules/services/jellyfin.nix>
|
||||||
|
<my/modules/shell/zsh.nix>
|
||||||
];
|
];
|
||||||
|
|
||||||
time.timeZone = "America/Toronto";
|
|
||||||
|
|
||||||
networking.hostName = "aka";
|
networking.hostName = "aka";
|
||||||
networking.networkmanager.enable = true;
|
networking.networkmanager.enable = true;
|
||||||
|
|
||||||
|
time.timeZone = "America/Toronto";
|
||||||
}
|
}
|
158
machines/ao.nix
Normal file
158
machines/ao.nix
Normal file
|
@ -0,0 +1,158 @@
|
||||||
|
# Ao -- my home development server
|
||||||
|
|
||||||
|
{ config, ... }:
|
||||||
|
{
|
||||||
|
imports = [
|
||||||
|
./. # import common settings
|
||||||
|
|
||||||
|
<my/modules/services/ssh.nix>
|
||||||
|
<my/modules/services/nginx.nix>
|
||||||
|
<my/modules/services/gitea.nix>
|
||||||
|
<my/modules/services/syncthing.nix>
|
||||||
|
|
||||||
|
<my/modules/shell/git.nix>
|
||||||
|
<my/modules/shell/zsh.nix>
|
||||||
|
];
|
||||||
|
|
||||||
|
networking.hostName = "ao";
|
||||||
|
networking.networkmanager.enable = true;
|
||||||
|
time.timeZone = "America/Toronto";
|
||||||
|
|
||||||
|
# syncthing
|
||||||
|
services.syncthing.guiAddress = "192.168.1.10:8384";
|
||||||
|
networking.firewall.allowedTCPPorts = [ 8384 ];
|
||||||
|
|
||||||
|
# nginx hosts
|
||||||
|
services.nginx = {
|
||||||
|
user = config.my.username;
|
||||||
|
virtualHosts = {
|
||||||
|
"v0.io" = {
|
||||||
|
default = true;
|
||||||
|
enableACME = true;
|
||||||
|
forceSSL = true;
|
||||||
|
root = "/var/www/v0.io";
|
||||||
|
};
|
||||||
|
"dl.v0.io" = {
|
||||||
|
enableACME = true;
|
||||||
|
addSSL = true;
|
||||||
|
root = "/var/www/dl.v0.io";
|
||||||
|
locations."~* \.(?:ico|css|js|gif|jpe?g|png|mp4)$".extraConfig = ''
|
||||||
|
expires 30d;
|
||||||
|
add_header Pragma public;
|
||||||
|
add_header Cache-Control public;
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
"git.v0.io" = {
|
||||||
|
enableACME = true;
|
||||||
|
forceSSL = true;
|
||||||
|
locations."/".proxyPass = http://127.0.0.1:3000;
|
||||||
|
};
|
||||||
|
"tv.v0.io" = {
|
||||||
|
http2 = true; # more performant for streaming
|
||||||
|
enableACME = true;
|
||||||
|
forceSSL = true;
|
||||||
|
extraConfig = ''
|
||||||
|
add_header Content-Security-Policy "default-src https: data: blob:; style-src 'self' 'unsafe-inline'; script-src 'self' 'unsafe-inline' https://www.gstatic.com/cv/js/sender/v1/cast_sender.js; worker-src 'self' blob:; connect-src 'self'; object-src 'none'; frame-ancestors 'self'";
|
||||||
|
|
||||||
|
# Some players don't reopen a socket and playback stops totally
|
||||||
|
# instead of resuming after an extended pause
|
||||||
|
send_timeout 100m;
|
||||||
|
|
||||||
|
# Intentionally not hardened for security for player support and
|
||||||
|
# encryption video streams has a lot of overhead with something like
|
||||||
|
# AES-256-GCM-SHA384.
|
||||||
|
ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:ECDHE-RSA-DES-CBC3-SHA:ECDHE-ECDSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA';
|
||||||
|
|
||||||
|
ssl_stapling on;
|
||||||
|
ssl_stapling_verify on;
|
||||||
|
|
||||||
|
# Forward real ip and host to Plex
|
||||||
|
proxy_set_header Referer $server_addr;
|
||||||
|
proxy_set_header Origin $server_addr;
|
||||||
|
|
||||||
|
# Security / XSS Mitigation Headers
|
||||||
|
add_header X-Frame-Options "SAMEORIGIN";
|
||||||
|
add_header X-XSS-Protection "1; mode=block";
|
||||||
|
add_header X-Content-Type-Options "nosniff";
|
||||||
|
'';
|
||||||
|
# locations."= /".return = "302 https://tv.v0.io/web/index.html";
|
||||||
|
locations."/socket" = {
|
||||||
|
proxyPass = "http://192.168.1.13:8096";
|
||||||
|
proxyHttpVersion = "1.1";
|
||||||
|
# Buffering off send to the client as soon as the data is received
|
||||||
|
# from JellyFin.
|
||||||
|
proxyBuffering = "off";
|
||||||
|
};
|
||||||
|
locations."/" = {
|
||||||
|
proxyWebsockets = true;
|
||||||
|
proxyPass = "http://192.168.1.13:8096";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
# "plex.v0.io" = {
|
||||||
|
# http2 = true; # more performant for streaming
|
||||||
|
# enableACME = true;
|
||||||
|
# forceSSL = true;
|
||||||
|
# extraConfig = ''
|
||||||
|
# # Some players don't reopen a socket and playback stops totally
|
||||||
|
# # instead of resuming after an extended pause
|
||||||
|
# send_timeout 100m;
|
||||||
|
|
||||||
|
# # Intentionally not hardened for security for player support and
|
||||||
|
# # encryption video streams has a lot of overhead with something like
|
||||||
|
# # AES-256-GCM-SHA384.
|
||||||
|
# ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:ECDHE-RSA-DES-CBC3-SHA:ECDHE-ECDSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA';
|
||||||
|
|
||||||
|
# # Forward real ip and host to Plex
|
||||||
|
# proxy_set_header Referer $server_addr;
|
||||||
|
# proxy_set_header Origin $server_addr;
|
||||||
|
|
||||||
|
# # Nginx default client_max_body_size is 1MB, which breaks Camera
|
||||||
|
# # Upload feature from the phones. Increasing the limit fixes the
|
||||||
|
# # issue. Anyhow, if 4K videos are expected to be uploaded, the size
|
||||||
|
# # might need to be increased even more
|
||||||
|
# client_max_body_size 100M;
|
||||||
|
|
||||||
|
# # Plex headers
|
||||||
|
# proxy_set_header X-Plex-Client-Identifier $http_x_plex_client_identifier;
|
||||||
|
# proxy_set_header X-Plex-Device $http_x_plex_device;
|
||||||
|
# proxy_set_header X-Plex-Device-Name $http_x_plex_device_name;
|
||||||
|
# proxy_set_header X-Plex-Platform $http_x_plex_platform;
|
||||||
|
# proxy_set_header X-Plex-Platform-Version $http_x_plex_platform_version;
|
||||||
|
# proxy_set_header X-Plex-Product $http_x_plex_product;
|
||||||
|
# proxy_set_header X-Plex-Token $http_x_plex_token;
|
||||||
|
# proxy_set_header X-Plex-Version $http_x_plex_version;
|
||||||
|
# proxy_set_header X-Plex-Nocache $http_x_plex_nocache;
|
||||||
|
# proxy_set_header X-Plex-Provides $http_x_plex_provides;
|
||||||
|
# proxy_set_header X-Plex-Device-Vendor $http_x_plex_device_vendor;
|
||||||
|
# proxy_set_header X-Plex-Model $http_x_plex_model;
|
||||||
|
|
||||||
|
# # Buffering off send to the client as soon as the data is received
|
||||||
|
# # from Plex.
|
||||||
|
# proxy_buffering off;
|
||||||
|
# '';
|
||||||
|
# locations."= /".return = "302 https://plex.v0.io/web/index.html";
|
||||||
|
# locations."/" = {
|
||||||
|
# proxyWebsockets = true;
|
||||||
|
# proxyPass = "http://192.168.1.13:32400";
|
||||||
|
# };
|
||||||
|
# };
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
security.acme.certs = {
|
||||||
|
"v0.io".email = "henrik@lissner.net";
|
||||||
|
"dl.v0.io".email = "henrik@lissner.net";
|
||||||
|
"git.v0.io".email = "henrik@lissner.net";
|
||||||
|
"plex.v0.io".email = "henrik@lissner.net";
|
||||||
|
};
|
||||||
|
|
||||||
|
services.gitea = {
|
||||||
|
appName = "V-NOUGHT";
|
||||||
|
domain = "v0.io";
|
||||||
|
rootUrl = "https://git.v0.io/";
|
||||||
|
extraConfig = ''
|
||||||
|
[server]
|
||||||
|
SSH_DOMAIN = v0.io
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
}
|
57
machines/default.nix
Normal file
57
machines/default.nix
Normal file
|
@ -0,0 +1,57 @@
|
||||||
|
# ...
|
||||||
|
|
||||||
|
{ config, lib, pkgs, ... }:
|
||||||
|
{
|
||||||
|
# Nothing in /tmp should survive a reboot
|
||||||
|
boot.cleanTmpDir = true;
|
||||||
|
# Use simple bootloader; I prefer the on-demand BIOs boot menu
|
||||||
|
boot.loader.systemd-boot.enable = true;
|
||||||
|
boot.loader.efi.canTouchEfiVariables = true;
|
||||||
|
|
||||||
|
# Just the bear necessities~
|
||||||
|
environment.systemPackages = with pkgs; [
|
||||||
|
coreutils
|
||||||
|
git
|
||||||
|
killall
|
||||||
|
unzip
|
||||||
|
vim
|
||||||
|
wget
|
||||||
|
# Support for extra filesystems
|
||||||
|
sshfs
|
||||||
|
exfat
|
||||||
|
ntfs3g
|
||||||
|
hfsprogs
|
||||||
|
# cached-nix-shell, for instant nix-shell scripts
|
||||||
|
(callPackage
|
||||||
|
(builtins.fetchTarball
|
||||||
|
https://github.com/xzfc/cached-nix-shell/archive/master.tar.gz) {})
|
||||||
|
];
|
||||||
|
|
||||||
|
###
|
||||||
|
# My user settings
|
||||||
|
my = {
|
||||||
|
username = "hlissner";
|
||||||
|
env.PATH = [ <my/bin> ];
|
||||||
|
user = {
|
||||||
|
isNormalUser = true;
|
||||||
|
uid = 1000;
|
||||||
|
extraGroups = [ "wheel" "video" "networkmanager" ];
|
||||||
|
shell = pkgs.zsh;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
# Obey XDG conventions; a tidy $HOME is a tidy mind.
|
||||||
|
my.home.xdg.enable = true;
|
||||||
|
environment.variables = {
|
||||||
|
# These are the defaults, but some applications are buggy when these lack
|
||||||
|
# explicit values.
|
||||||
|
XDG_CONFIG_HOME = "$HOME/.config";
|
||||||
|
XDG_CACHE_HOME = "$HOME/.cache";
|
||||||
|
XDG_DATA_HOME = "$HOME/.local/share";
|
||||||
|
XDG_BIN_HOME = "$HOME/.local/bin";
|
||||||
|
};
|
||||||
|
nix.trustedUsers = [ config.my.username ];
|
||||||
|
|
||||||
|
### Universal defaults
|
||||||
|
networking.firewall.enable = true;
|
||||||
|
}
|
54
machines/kuro.nix
Normal file
54
machines/kuro.nix
Normal file
|
@ -0,0 +1,54 @@
|
||||||
|
# Kuro -- my desktop
|
||||||
|
|
||||||
|
{ config, lib, utils, pkgs, ... }:
|
||||||
|
{
|
||||||
|
imports = [
|
||||||
|
./. # import common settings
|
||||||
|
|
||||||
|
<my/modules/desktop/bspwm.nix>
|
||||||
|
|
||||||
|
<my/modules/chat.nix> # discord, mainly
|
||||||
|
<my/modules/recording.nix> # recording video & audio
|
||||||
|
<my/modules/daw.nix> # making music
|
||||||
|
<my/modules/music.nix> # playing music
|
||||||
|
<my/modules/graphics.nix> # art & design
|
||||||
|
<my/modules/vm.nix> # virtualbox for testing
|
||||||
|
|
||||||
|
<my/modules/browser/firefox.nix>
|
||||||
|
<my/modules/dev/cpp.nix>
|
||||||
|
<my/modules/dev/rust.nix>
|
||||||
|
<my/modules/editors/emacs.nix>
|
||||||
|
<my/modules/editors/vim.nix>
|
||||||
|
<my/modules/gaming/steam.nix>
|
||||||
|
<my/modules/shell/direnv.nix>
|
||||||
|
<my/modules/shell/git.nix>
|
||||||
|
<my/modules/shell/gnupg.nix>
|
||||||
|
<my/modules/shell/pass.nix>
|
||||||
|
<my/modules/shell/zsh.nix>
|
||||||
|
|
||||||
|
# Services
|
||||||
|
<my/modules/services/syncthing.nix>
|
||||||
|
|
||||||
|
# Themes
|
||||||
|
<my/modules/themes/aquanaut>
|
||||||
|
];
|
||||||
|
|
||||||
|
networking.hostName = "kuro";
|
||||||
|
networking.networkmanager.enable = true;
|
||||||
|
time.timeZone = "America/Toronto";
|
||||||
|
|
||||||
|
## Hardware
|
||||||
|
# GPU
|
||||||
|
services.xserver.videoDrivers = [ "nvidia" ];
|
||||||
|
# For ergodox ez
|
||||||
|
my.packages = [ pkgs.teensy-loader-cli ];
|
||||||
|
my.alias.teensyload = "sudo teensy-loader-cli -w -v --mcu=atmega32u4";
|
||||||
|
# For my intuos4 pro. My cintiq doesn't work on Linux though :(
|
||||||
|
services.xserver.wacom.enable = true;
|
||||||
|
my.init = ''
|
||||||
|
# lock tablet to main display
|
||||||
|
xinput map-to-output $(xinput list --id-only "Wacom Intuos Pro S Pen eraser") DVI-I-1
|
||||||
|
xinput map-to-output $(xinput list --id-only "Wacom Intuos Pro S Pen cursor") DVI-I-1
|
||||||
|
xinput map-to-output $(xinput list --id-only "Wacom Intuos Pro S Pen stylus") DVI-I-1
|
||||||
|
'';
|
||||||
|
}
|
60
machines/shiro.nix
Normal file
60
machines/shiro.nix
Normal file
|
@ -0,0 +1,60 @@
|
||||||
|
# Shiro -- my laptop
|
||||||
|
|
||||||
|
{ config, lib, pkgs, ... }:
|
||||||
|
|
||||||
|
let nixos-hardware = builtins.fetchTarball https://github.com/NixOS/nixos-hardware/archive/master.tar.gz;
|
||||||
|
in {
|
||||||
|
imports = [
|
||||||
|
./. # import common settings
|
||||||
|
|
||||||
|
# Hardware specific
|
||||||
|
"${nixos-hardware}/dell/xps/13-9370"
|
||||||
|
|
||||||
|
<my/modules/desktop/bspwm.nix>
|
||||||
|
|
||||||
|
<my/modules/chat.nix> # discord, mainly
|
||||||
|
<my/modules/recording.nix> # recording video & audio
|
||||||
|
<my/modules/daw.nix> # making music
|
||||||
|
<my/modules/music.nix> # playing music
|
||||||
|
<my/modules/graphics.nix> # art & design
|
||||||
|
# <my/modules/vm.nix> # virtualbox for testing
|
||||||
|
|
||||||
|
<my/modules/browser/firefox.nix>
|
||||||
|
<my/modules/dev>
|
||||||
|
<my/modules/editors/emacs.nix>
|
||||||
|
<my/modules/editors/vim.nix>
|
||||||
|
<my/modules/shell/direnv.nix>
|
||||||
|
<my/modules/shell/git.nix>
|
||||||
|
<my/modules/shell/gnupg.nix>
|
||||||
|
<my/modules/shell/pass.nix>
|
||||||
|
<my/modules/shell/zsh.nix>
|
||||||
|
|
||||||
|
# Services
|
||||||
|
<my/modules/services/syncthing.nix>
|
||||||
|
|
||||||
|
# Themes
|
||||||
|
<modules/themes/aquanaut>
|
||||||
|
];
|
||||||
|
|
||||||
|
theme.wallpaper = <my/assets/wallpapers/aquanaut.2560x1440.jpg>;
|
||||||
|
networking.hostName = "shiro";
|
||||||
|
networking.wireless.enable = true;
|
||||||
|
|
||||||
|
time.timeZone = "America/Toronto";
|
||||||
|
# time.timeZone = "Europe/Copenhagen";
|
||||||
|
|
||||||
|
# Optimize power use
|
||||||
|
environment.systemPackages = [ pkgs.acpi ];
|
||||||
|
powerManagement.powertop.enable = true;
|
||||||
|
# Monitor backlight control
|
||||||
|
programs.light.enable = true;
|
||||||
|
# Encrypted /home
|
||||||
|
boot.initrd.luks.devices = [
|
||||||
|
{
|
||||||
|
name = "home";
|
||||||
|
device = "/dev/nvme0n1p8";
|
||||||
|
preLVM = true;
|
||||||
|
allowDiscards = true;
|
||||||
|
}
|
||||||
|
];
|
||||||
|
}
|
|
@ -1,25 +1,21 @@
|
||||||
{ config, lib, pkgs, ... }:
|
{ config, lib, pkgs, ... }:
|
||||||
|
|
||||||
{
|
{
|
||||||
environment = {
|
my.packages = with pkgs; [
|
||||||
systemPackages = with pkgs; [
|
firefox-bin (pkgs.writeScriptBin "firefox-private" ''
|
||||||
firefox-bin
|
#! ${pkgs.bash}/bin/bash
|
||||||
(pkgs.writeScriptBin "firefox-private" ''
|
firefox --private-window "$@"
|
||||||
#! ${pkgs.bash}/bin/bash
|
'')
|
||||||
firefox --private-window "$@"
|
(makeDesktopItem {
|
||||||
'')
|
name = "firefox-private";
|
||||||
(makeDesktopItem {
|
desktopName = "Firefox (Private)";
|
||||||
name = "firefox-private";
|
genericName = "Open a private Firefox window";
|
||||||
desktopName = "Firefox (Private)";
|
icon = "firefox";
|
||||||
genericName = "Open a private Firefox window";
|
exec = "${firefox-bin}/bin/firefox --private-window";
|
||||||
icon = "firefox";
|
categories = "Network";
|
||||||
exec = "${firefox-bin}/bin/firefox --private-window";
|
})
|
||||||
categories = "Network";
|
];
|
||||||
})
|
|
||||||
];
|
my.env.BROWSER = "firefox";
|
||||||
variables = {
|
my.env.XDG_DESKTOP_DIR = "$HOME"; # prevent firefox creating ~/Desktop
|
||||||
BROWSER = "firefox";
|
|
||||||
XDG_DESKTOP_DIR = "$HOME"; # prevent firefox creating ~/Desktop
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,19 +1,14 @@
|
||||||
{ config, lib, pkgs, ... }:
|
{ config, lib, pkgs, ... }:
|
||||||
{
|
{
|
||||||
environment = {
|
my.packages = [ pkgs.qutebrowser ];
|
||||||
systemPackages = with pkgs; [
|
my.env.BROWSER = "qutebrowser";
|
||||||
qutebrowser
|
my.home.xdg = {
|
||||||
];
|
|
||||||
variables.BROWSER = "qutebrowser";
|
|
||||||
};
|
|
||||||
|
|
||||||
home.xdg = {
|
|
||||||
configFile."qutebrowser" = {
|
configFile."qutebrowser" = {
|
||||||
source = <config/qutebrowser>;
|
source = <my/config/qutebrowser>;
|
||||||
recursive = true;
|
recursive = true;
|
||||||
};
|
};
|
||||||
dataFile."qutebrowser/greasemonkey" = {
|
dataFile."qutebrowser/greasemonkey" = {
|
||||||
source = <config/qutebrowser/greasemonkey>;
|
source = <my/config/qutebrowser/greasemonkey>;
|
||||||
recursive = true;
|
recursive = true;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
10
modules/chat.nix
Normal file
10
modules/chat.nix
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
# Even neckbeards have a social life. Not that I have one. A neckbeard, I mean.
|
||||||
|
# But when I do have either, then discord and weechat (or Emacs) are my go-to.
|
||||||
|
|
||||||
|
{ config, lib, pkgs, ... }:
|
||||||
|
{
|
||||||
|
my.packages = with pkgs; [
|
||||||
|
# weechat # TODO For the real neckbeards
|
||||||
|
discord # For everyone else
|
||||||
|
];
|
||||||
|
}
|
|
@ -5,7 +5,7 @@
|
||||||
|
|
||||||
{ config, lib, pkgs, ... }:
|
{ config, lib, pkgs, ... }:
|
||||||
{
|
{
|
||||||
environment.systemPackages = with pkgs; [
|
my.packages = with pkgs; [
|
||||||
audacity # for recording and remastering audio
|
audacity # for recording and remastering audio
|
||||||
# lmms # for making music
|
# lmms # for making music
|
||||||
sunvox # for making music (where LMMS is overkill)
|
sunvox # for making music (where LMMS is overkill)
|
||||||
|
@ -13,6 +13,6 @@
|
||||||
# Build our own LMMS because the built-in nixpkg is broken, due to a 'Could
|
# Build our own LMMS because the built-in nixpkg is broken, due to a 'Could
|
||||||
# not find the Qt platform plugin "xcb" in ""' error on startup:
|
# not find the Qt platform plugin "xcb" in ""' error on startup:
|
||||||
# https://github.com/NixOS/nixpkgs/issues/76074
|
# https://github.com/NixOS/nixpkgs/issues/76074
|
||||||
(callPackage <packages/lmms.nix> {})
|
(callPackage <my/packages/lmms.nix> {})
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
|
@ -12,68 +12,62 @@
|
||||||
./thunar.nix
|
./thunar.nix
|
||||||
];
|
];
|
||||||
|
|
||||||
environment = {
|
environment.systemPackages = with pkgs; [
|
||||||
systemPackages = with pkgs; [
|
lightdm
|
||||||
lightdm
|
bspwm
|
||||||
bspwm
|
dunst
|
||||||
dunst
|
libnotify
|
||||||
libnotify
|
(polybar.override {
|
||||||
(polybar.override {
|
pulseSupport = true;
|
||||||
pulseSupport = true;
|
nlSupport = true;
|
||||||
nlSupport = true;
|
})
|
||||||
})
|
|
||||||
|
|
||||||
xst # st + nice-to-have extensions
|
xst # st + nice-to-have extensions
|
||||||
(makeDesktopItem {
|
(makeDesktopItem {
|
||||||
name = "xst";
|
name = "xst";
|
||||||
desktopName = "Suckless Terminal";
|
desktopName = "Suckless Terminal";
|
||||||
genericName = "Default terminal";
|
genericName = "Default terminal";
|
||||||
icon = "utilities-terminal";
|
icon = "utilities-terminal";
|
||||||
exec = "${xst}/bin/xst";
|
exec = "${xst}/bin/xst";
|
||||||
categories = "Development;System;Utility";
|
categories = "Development;System;Utility";
|
||||||
})
|
})
|
||||||
|
|
||||||
(writeScriptBin "st-scratch" ''
|
(writeScriptBin "st-scratch" ''
|
||||||
#!${stdenv.shell}
|
#!${stdenv.shell}
|
||||||
SCRID=st-scratch
|
SCRID=st-scratch
|
||||||
focused=$(xdotool getactivewindow)
|
focused=$(xdotool getactivewindow)
|
||||||
scratch=$(xdotool search --onlyvisible --classname $SCRID)
|
scratch=$(xdotool search --onlyvisible --classname $SCRID)
|
||||||
if [[ -n $scratch ]]; then
|
if [[ -n $scratch ]]; then
|
||||||
if [[ $focused == $scratch ]]; then
|
if [[ $focused == $scratch ]]; then
|
||||||
xdotool windowkill $scratch
|
xdotool windowkill $scratch
|
||||||
else
|
|
||||||
xdotool windowactivate $scratch
|
|
||||||
fi
|
|
||||||
else
|
else
|
||||||
xst -t $SCRID -n $SCRID -c $SCRID \
|
xdotool windowactivate $scratch
|
||||||
-f "$(xrdb -query | grep 'st-scratch\.font' | cut -f2)" \
|
|
||||||
-g 100x26 \
|
|
||||||
-e $SHELL
|
|
||||||
fi
|
fi
|
||||||
'')
|
else
|
||||||
(writeScriptBin "st-calc" ''
|
|
||||||
#!${stdenv.shell}
|
|
||||||
SCRID=st-calc
|
|
||||||
scratch=$(xdotool search --onlyvisible --classname $SCRID)
|
|
||||||
[ -n "$scratch" ] && xdotool windowkill $scratch
|
|
||||||
xst -t $SCRID -n $SCRID -c $SCRID \
|
xst -t $SCRID -n $SCRID -c $SCRID \
|
||||||
-f "$(xrdb -query | grep 'st-scratch\.font' | cut -f2)" \
|
-f "$(xrdb -query | grep 'st-scratch\.font' | cut -f2)" \
|
||||||
-g 80x12 \
|
-g 100x26 \
|
||||||
-e $SHELL -c qalc
|
-e $SHELL
|
||||||
'')
|
fi
|
||||||
(makeDesktopItem {
|
'')
|
||||||
name = "st-calc";
|
(writeScriptBin "st-calc" ''
|
||||||
desktopName = "Calculator";
|
#!${stdenv.shell}
|
||||||
icon = "calc";
|
SCRID=st-calc
|
||||||
exec = "st-calc";
|
scratch=$(xdotool search --onlyvisible --classname $SCRID)
|
||||||
categories = "Development";
|
[ -n "$scratch" ] && xdotool windowkill $scratch
|
||||||
})
|
xst -t $SCRID -n $SCRID -c $SCRID \
|
||||||
];
|
-f "$(xrdb -query | grep 'st-scratch\.font' | cut -f2)" \
|
||||||
};
|
-g 80x12 \
|
||||||
|
-e $SHELL -c qalc
|
||||||
fonts.fonts = [ pkgs.siji ];
|
'')
|
||||||
|
(makeDesktopItem {
|
||||||
programs.zsh.interactiveShellInit = "export TERM=xterm-256color";
|
name = "st-calc";
|
||||||
|
desktopName = "Calculator";
|
||||||
|
icon = "calc";
|
||||||
|
exec = "st-calc";
|
||||||
|
categories = "Development";
|
||||||
|
})
|
||||||
|
];
|
||||||
|
|
||||||
services = {
|
services = {
|
||||||
xserver = {
|
xserver = {
|
||||||
|
@ -83,7 +77,7 @@
|
||||||
enable = true;
|
enable = true;
|
||||||
greeters.mini = {
|
greeters.mini = {
|
||||||
enable = true;
|
enable = true;
|
||||||
user = "hlissner";
|
user = config.my.username;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
@ -92,13 +86,34 @@
|
||||||
enable = true;
|
enable = true;
|
||||||
backend = "glx";
|
backend = "glx";
|
||||||
vSync = true;
|
vSync = true;
|
||||||
|
opacityRules = [
|
||||||
|
"100:class_g = 'Firefox'"
|
||||||
|
"100:class_g = 'VirtualBox Machine'"
|
||||||
|
# Art/image programs where we need fidelity
|
||||||
|
"100:class_g = 'Gimp'"
|
||||||
|
"100:class_g = 'Inkscape'"
|
||||||
|
"100:class_g = 'aseprite'"
|
||||||
|
"100:class_g = 'krita'"
|
||||||
|
"100:class_g = 'feh'"
|
||||||
|
"100:class_g = 'mpv'"
|
||||||
|
];
|
||||||
|
settings.blur-background-exclude = [
|
||||||
|
"window_type = 'dock'"
|
||||||
|
"window_type = 'desktop'"
|
||||||
|
"_GTK_FRAME_EXTENTS@:c"
|
||||||
|
];
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
home.xdg.configFile = {
|
# For polybar
|
||||||
"sxhkd".source = <config/sxhkd>;
|
fonts.fonts = [ pkgs.siji ];
|
||||||
|
|
||||||
# link recursively so other modules can link files in their folders
|
my = {
|
||||||
"bspwm" = { source = <config/bspwm>; recursive = true; };
|
env.PATH = [ <my/config/bspwm/bin> ];
|
||||||
|
home.xdg.configFile = {
|
||||||
|
"sxhkd".source = <my/config/sxhkd>;
|
||||||
|
# link recursively so other modules can link files in their folders
|
||||||
|
"bspwm" = { source = <my/config/bspwm>; recursive = true; };
|
||||||
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,15 +1,12 @@
|
||||||
{ config, lib, pkgs, ... }:
|
{ config, lib, pkgs, ... }:
|
||||||
|
|
||||||
{
|
{
|
||||||
environment.systemPackages = with pkgs; [
|
my.packages = with pkgs; [
|
||||||
redshift
|
libqalculate
|
||||||
xclip
|
xclip
|
||||||
xdotool
|
xdotool
|
||||||
ffmpeg
|
|
||||||
mpv # video player
|
mpv # video player
|
||||||
feh # image viewer
|
feh # image viewer
|
||||||
maim
|
|
||||||
slop
|
|
||||||
|
|
||||||
# Useful apps
|
# Useful apps
|
||||||
evince # pdf reader
|
evince # pdf reader
|
||||||
|
@ -23,6 +20,15 @@
|
||||||
redshift.enable = true;
|
redshift.enable = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
# For redshift
|
||||||
|
location = (if config.time.timeZone == "America/Toronto" then {
|
||||||
|
latitude = 43.70011;
|
||||||
|
longitude = -79.4163;
|
||||||
|
} else if config.time.timeZone == "Europe/Copenhagen" then {
|
||||||
|
latitude = 55.88;
|
||||||
|
longitude = 12.5;
|
||||||
|
} else {});
|
||||||
|
|
||||||
fonts = {
|
fonts = {
|
||||||
enableFontDir = true;
|
enableFontDir = true;
|
||||||
enableGhostscriptFonts = true;
|
enableGhostscriptFonts = true;
|
||||||
|
|
|
@ -1,32 +1,38 @@
|
||||||
{ config, lib, pkgs, ... }:
|
{ config, lib, pkgs, ... }:
|
||||||
|
|
||||||
{
|
{
|
||||||
environment = {
|
my = {
|
||||||
systemPackages = with pkgs; [
|
env.PATH = [ <my/config/rofi/bin> ];
|
||||||
|
# link recursively so other modules can link files in its folder
|
||||||
|
home.xdg.configFile."rofi" = {
|
||||||
|
source = <my/config/rofi>;
|
||||||
|
recursive = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
packages = with pkgs; [
|
||||||
(writeScriptBin "rofi" ''
|
(writeScriptBin "rofi" ''
|
||||||
#!${stdenv.shell}
|
#!${stdenv.shell}
|
||||||
exec ${rofi}/bin/rofi -terminal xst -m -1 "$@"
|
exec ${rofi}/bin/rofi -terminal xst -m -1 "$@"
|
||||||
'')
|
'')
|
||||||
rofi
|
|
||||||
|
|
||||||
# Fake rofi dmenu entries
|
# Fake rofi dmenu entries
|
||||||
(makeDesktopItem {
|
(makeDesktopItem {
|
||||||
name = "rofi-browsermenu";
|
name = "rofi-browsermenu";
|
||||||
desktopName = "Open Bookmark in Firefox";
|
desktopName = "Open Bookmark in Firefox";
|
||||||
icon = "bookmark-new-symbolic";
|
icon = "bookmark-new-symbolic";
|
||||||
exec = "${<config/rofi>}/bin/rofi-browsermenu";
|
exec = "${<my/config/rofi>}/bin/rofi-browsermenu";
|
||||||
})
|
})
|
||||||
(makeDesktopItem {
|
(makeDesktopItem {
|
||||||
name = "rofi-filemenu";
|
name = "rofi-filemenu";
|
||||||
desktopName = "Open Directory in Terminal";
|
desktopName = "Open Directory in Terminal";
|
||||||
icon = "folder";
|
icon = "folder";
|
||||||
exec = "${<config/rofi>}/bin/rofi-filemenu";
|
exec = "${<my/config/rofi>}/bin/rofi-filemenu";
|
||||||
})
|
})
|
||||||
(makeDesktopItem {
|
(makeDesktopItem {
|
||||||
name = "rofi-filemenu-scratch";
|
name = "rofi-filemenu-scratch";
|
||||||
desktopName = "Open Directory in Scratch Terminal";
|
desktopName = "Open Directory in Scratch Terminal";
|
||||||
icon = "folder";
|
icon = "folder";
|
||||||
exec = "${<config/rofi>}/bin/rofi-filemenu -x";
|
exec = "${<my/config/rofi>}/bin/rofi-filemenu -x";
|
||||||
})
|
})
|
||||||
|
|
||||||
(makeDesktopItem {
|
(makeDesktopItem {
|
||||||
|
@ -49,12 +55,4 @@
|
||||||
})
|
})
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
|
|
||||||
home.xdg.configFile = {
|
|
||||||
# link recursively so other modules can link files in its folder
|
|
||||||
"rofi" = {
|
|
||||||
source = <config/rofi>;
|
|
||||||
recursive = true;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
{ config, lib, pkgs, ... }:
|
{ config, lib, pkgs, ... }:
|
||||||
|
|
||||||
{
|
{
|
||||||
environment.systemPackages = with pkgs; [
|
my.packages = with pkgs; [
|
||||||
xfce.thunar
|
xfce.thunar
|
||||||
xfce.tumbler # for thumbnails
|
xfce.tumbler # for thumbnails
|
||||||
];
|
];
|
||||||
|
|
|
@ -3,9 +3,10 @@
|
||||||
{
|
{
|
||||||
imports = [ ./. ];
|
imports = [ ./. ];
|
||||||
|
|
||||||
environment.systemPackages = with pkgs; [
|
my.packages = with pkgs; [
|
||||||
clang
|
clang
|
||||||
gcc
|
gcc
|
||||||
cmake
|
cmake
|
||||||
|
llvmPackages.libcxx
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
{ config, lib, pkgs, ... }:
|
{ config, lib, pkgs, ... }:
|
||||||
|
|
||||||
{
|
{
|
||||||
environment.systemPackages = with pkgs; [
|
my.packages = with pkgs; [
|
||||||
gnumake
|
gnumake
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,12 +1,10 @@
|
||||||
{ config, lib, pkgs, ... }:
|
{ config, lib, pkgs, ... }:
|
||||||
|
|
||||||
{
|
{
|
||||||
environment.systemPackages = with pkgs; [
|
my = {
|
||||||
rustup
|
packages = with pkgs; [ rustup ];
|
||||||
];
|
env.CARGO_HOME = "$XDG_DATA_HOME/cargo";
|
||||||
|
env.RUSTUP_HOME = "$XDG_DATA_HOME/rustup";
|
||||||
home.xdg.configFile = {
|
env.PATH = [ "$CARGO_HOME/bin" ];
|
||||||
"zsh/rc.d/aliases.rust.zsh".source = <config/rust/aliases.zsh>;
|
|
||||||
"zsh/rc.d/env.rust.zsh".source = <config/rust/env.zsh>;
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,3 +1,6 @@
|
||||||
|
# I don't often use unity except for team projects. On my own, I prefer rolling
|
||||||
|
# my own (or godot).
|
||||||
|
|
||||||
{ config, lib, pkgs, ... }:
|
{ config, lib, pkgs, ... }:
|
||||||
|
|
||||||
{
|
{
|
||||||
|
|
|
@ -1,37 +1,37 @@
|
||||||
# Emacs is my main driver. I'm the author of Doom Emacs
|
# Emacs is my main driver. I'm the author of Doom Emacs
|
||||||
# <https://github.com/hlissner/doom-emacs>. This module sets it up to meed my
|
# https://github.com/hlissner/doom-emacs. This module sets it up to meet my
|
||||||
# particular Doomy needs.
|
# particular Doomy needs.
|
||||||
|
|
||||||
{ config, lib, pkgs, ... }:
|
{ config, lib, pkgs, ... }:
|
||||||
{
|
{
|
||||||
environment.systemPackages = with pkgs; [
|
my = {
|
||||||
# Doom dependencies
|
packages = with pkgs; [
|
||||||
emacs
|
# Doom dependencies
|
||||||
git
|
emacs
|
||||||
(ripgrep.override {withPCRE2 = true;})
|
git
|
||||||
# Optional dependencies
|
(ripgrep.override {withPCRE2 = true;})
|
||||||
editorconfig-core-c # per-project style config
|
# Optional dependencies
|
||||||
fd # faster projectile indexing
|
editorconfig-core-c # per-project style config
|
||||||
imagemagick # for image-dired
|
fd # faster projectile indexing
|
||||||
gnutls # for TLS connectivity
|
imagemagick # for image-dired
|
||||||
(lib.mkIf (config.programs.gnupg.agent.enable)
|
gnutls # for TLS connectivity
|
||||||
pinentry_emacs) # in-emacs gnupg prompts
|
(lib.mkIf (config.programs.gnupg.agent.enable)
|
||||||
zstd # for undo-tree compression
|
pinentry_emacs) # in-emacs gnupg prompts
|
||||||
ffmpeg # for screen recording emacs
|
zstd # for undo-tree compression
|
||||||
# Module dependencies
|
ffmpeg # for screen recording emacs
|
||||||
sqlite # :tools (lookup +docsets)
|
# Module dependencies
|
||||||
texlive.combined.scheme-medium # :lang org -- for latex previews
|
sqlite # :tools (lookup +docsets)
|
||||||
ccls # :lang (cc +lsp)
|
texlive.combined.scheme-medium # :lang org -- for latex previews
|
||||||
nodePackages.javascript-typescript-langserver # :lang (javascript +lsp)
|
ccls # :lang (cc +lsp)
|
||||||
rls # :lang (rust +lsp)
|
nodePackages.javascript-typescript-langserver # :lang (javascript +lsp)
|
||||||
];
|
rls
|
||||||
|
];
|
||||||
|
|
||||||
|
env.PATH = [ "$HOME/.emacs.d/bin" ];
|
||||||
|
zsh.rc = lib.readFile <my/config/emacs/aliases.zsh>;
|
||||||
|
};
|
||||||
|
|
||||||
fonts.fonts = [
|
fonts.fonts = [
|
||||||
pkgs.emacs-all-the-icons-fonts
|
pkgs.emacs-all-the-icons-fonts
|
||||||
];
|
];
|
||||||
|
|
||||||
home.xdg.configFile = {
|
|
||||||
"zsh/rc.d/aliases.emacs.zsh".source = <config/emacs/aliases.zsh>;
|
|
||||||
"zsh/rc.d/env.emacs.zsh".source = <config/emacs/env.zsh>;
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,15 +1,14 @@
|
||||||
|
# When I'm stuck in the terminal or don't have access to Emacs, (neo)vim is my
|
||||||
|
# go-to. I am a vimmer at heart, after all.
|
||||||
|
|
||||||
{ config, lib, pkgs, ... }:
|
{ config, lib, pkgs, ... }:
|
||||||
|
|
||||||
{
|
{
|
||||||
environment = {
|
my = {
|
||||||
sessionVariables = {
|
packages = with pkgs; [
|
||||||
EDITOR = "nvim";
|
|
||||||
VIMINIT = "let \\$MYVIMRC='\\$XDG_CONFIG_HOME/nvim/init.vim' | source \\$MYVIMRC";
|
|
||||||
};
|
|
||||||
|
|
||||||
systemPackages = with pkgs; [
|
|
||||||
editorconfig-core-c
|
editorconfig-core-c
|
||||||
neovim
|
neovim
|
||||||
];
|
];
|
||||||
|
env.EDITOR = "nvim";
|
||||||
|
env.VIMINIT = "let \\$MYVIMRC='\\$XDG_CONFIG_HOME/nvim/init.vim' | source \\$MYVIMRC";
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
{ config, lib, pkgs, ... }:
|
{ config, lib, pkgs, ... }:
|
||||||
|
|
||||||
{
|
{
|
||||||
environment.systemPackages = with pkgs; [
|
my.packages = with pkgs; [
|
||||||
steam
|
steam
|
||||||
steam-run-native # for GOG or humblebundle games
|
steam-run-native # for GOG or humblebundle games
|
||||||
];
|
];
|
||||||
|
|
22
modules/graphics.nix
Normal file
22
modules/graphics.nix
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
# It's difficult to be an artist/designer on Linux. I miss adobe and my tablets
|
||||||
|
# don't work without a lot of heart-ache. I set up a second computer just for
|
||||||
|
# adobe work (and gaming) to address this, so why do I install these programs on
|
||||||
|
# linux? Because sometimes I need to do some quick work right there and then.
|
||||||
|
|
||||||
|
{ config, lib, pkgs, ... }:
|
||||||
|
{
|
||||||
|
my.packages = with pkgs; [
|
||||||
|
font-manager # so many damned fonts...
|
||||||
|
|
||||||
|
imagemagick # for image manipulation from the shell
|
||||||
|
aseprite-unfree # pixel art
|
||||||
|
inkscape # illustrator & indesign
|
||||||
|
krita # replaces photoshop
|
||||||
|
gimp # replaces photoshop
|
||||||
|
gimpPlugins.resynthesizer2 # content-aware scaling in gimp
|
||||||
|
];
|
||||||
|
|
||||||
|
my.home.xdg.configFile = {
|
||||||
|
"GIMP/2.10" = { source = <my/config/gimp>; recursive = true; };
|
||||||
|
};
|
||||||
|
}
|
|
@ -1,7 +0,0 @@
|
||||||
{ config, lib, pkgs, ... }:
|
|
||||||
|
|
||||||
{
|
|
||||||
environment.systemPackages = [
|
|
||||||
pkgs.aseprite-unfree
|
|
||||||
];
|
|
||||||
}
|
|
|
@ -1,7 +0,0 @@
|
||||||
{ config, lib, pkgs, ... }:
|
|
||||||
|
|
||||||
{
|
|
||||||
environment.systemPackages = with pkgs; [
|
|
||||||
blender
|
|
||||||
];
|
|
||||||
}
|
|
|
@ -1,12 +0,0 @@
|
||||||
{ config, lib, pkgs, ... }:
|
|
||||||
|
|
||||||
{
|
|
||||||
environment.systemPackages = with pkgs; [
|
|
||||||
gimp
|
|
||||||
gimpPlugins.resynthesizer2
|
|
||||||
];
|
|
||||||
|
|
||||||
home-manager.users.hlissner.xdg.configFile = {
|
|
||||||
"GIMP/2.10" = { source = <config/gimp>; recursive = true; };
|
|
||||||
};
|
|
||||||
}
|
|
39
modules/music.nix
Normal file
39
modules/music.nix
Normal file
|
@ -0,0 +1,39 @@
|
||||||
|
# I use spotify for my music needs. Gone are the days where I'd manage 200gb+ of
|
||||||
|
# local music; most of which I haven't heard or don't even like.
|
||||||
|
|
||||||
|
{ config, lib, pkgs, ... }:
|
||||||
|
{
|
||||||
|
# services.spotifyd doesn't work so we'll have to roll our own spotifyd +
|
||||||
|
# spotify-tui solution. The dbus interface doesn't work, though, so we have to
|
||||||
|
# wait for spotify-tui to implement CLI command for controlling spotify
|
||||||
|
# playback. See https://github.com/Rigellute/spotify-tui/issues/147 or for
|
||||||
|
# spotifyd to get fixed.
|
||||||
|
my.packages = with pkgs; [
|
||||||
|
unstable.spotifyd
|
||||||
|
(writeScriptBin "spt" ''
|
||||||
|
#!${stdenv.shell}
|
||||||
|
if ! systemctl --user is-active spotifyd >/dev/null; then
|
||||||
|
systemctl --user start spotifyd
|
||||||
|
fi
|
||||||
|
${unstable.spotify-tui}/bin/spt
|
||||||
|
'')
|
||||||
|
|
||||||
|
# spotify-tui is fine for selecting and playing music, but incomplete. We
|
||||||
|
# occasionally still need the official client for more sophisticated search
|
||||||
|
# and the "made for you" playlists.
|
||||||
|
spotify
|
||||||
|
];
|
||||||
|
|
||||||
|
systemd.user.services.spotifyd.serviceConfig =
|
||||||
|
let spotifydConf = pkgs.writeText "spotifyd.conf" ''
|
||||||
|
[global]
|
||||||
|
username = g2qwjcs6334oacg1zg9wrihnn
|
||||||
|
password_cmd = ${pkgs.pass}/bin/pass www/spotify.com | head -n1
|
||||||
|
backend = pulseaudio
|
||||||
|
'';
|
||||||
|
in {
|
||||||
|
ExecStart = "${pkgs.unstable.spotifyd}/bin/spotifyd --no-daemon --cache-path /tmp/spotifyd --config-path ${spotifydConf}";
|
||||||
|
Restart = "always";
|
||||||
|
RestartSec = 6;
|
||||||
|
};
|
||||||
|
}
|
|
@ -9,9 +9,7 @@
|
||||||
|
|
||||||
{ config, lib, pkgs, ... }:
|
{ config, lib, pkgs, ... }:
|
||||||
{
|
{
|
||||||
environment.systemPackages = with pkgs; [
|
my.packages = with pkgs; [
|
||||||
slop # for selecting arbitrary regions on screen
|
|
||||||
ffmpeg # for recording gifs/mp4s quickly
|
|
||||||
audacity # for recording and remastering audio
|
audacity # for recording and remastering audio
|
||||||
obs-studio # for streaming to twitch/recording for youtube
|
obs-studio # for streaming to twitch/recording for youtube
|
||||||
handbrake # for encoding footage
|
handbrake # for encoding footage
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
services.syncthing = {
|
services.syncthing = {
|
||||||
enable = true;
|
enable = true;
|
||||||
openDefaultPorts = true;
|
openDefaultPorts = true;
|
||||||
user = "hlissner";
|
user = config.my.username;
|
||||||
configDir = "/home/hlissner/.config/syncthing";
|
configDir = "/home/hlissner/.config/syncthing";
|
||||||
dataDir = "/home/hlissner/sync";
|
dataDir = "/home/hlissner/sync";
|
||||||
};
|
};
|
||||||
|
|
|
@ -1,8 +1,10 @@
|
||||||
{ config, lib, pkgs, ... }:
|
{ config, lib, pkgs, ... }:
|
||||||
|
|
||||||
{
|
{
|
||||||
environment.systemPackages = with pkgs; [
|
services.lorri.enable = true;
|
||||||
direnv
|
|
||||||
(import <nixpkgs-unstable> {}).lorri
|
my = {
|
||||||
];
|
packages = [ pkgs.direnv ];
|
||||||
|
zsh.rc = "_cache direnv hook zsh";
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,14 +1,16 @@
|
||||||
{ config, lib, pkgs, ... }:
|
{ config, lib, pkgs, ... }:
|
||||||
|
|
||||||
{
|
{
|
||||||
environment.systemPackages = with pkgs; [
|
my = {
|
||||||
gitAndTools.hub
|
packages = with pkgs; [
|
||||||
gitAndTools.diff-so-fancy
|
gitAndTools.hub
|
||||||
];
|
gitAndTools.diff-so-fancy
|
||||||
|
];
|
||||||
home.xdg.configFile = {
|
zsh.rc = lib.readFile <my/config/git/aliases.zsh>;
|
||||||
"git/config".source = <config/git/config>;
|
# Do recursively, in case git stores files in this folder
|
||||||
"git/ignore".source = <config/git/ignore>;
|
home.xdg.configFile = {
|
||||||
"zsh/rc.d/aliases.git.zsh".source = <config/git/aliases.zsh>;
|
"git/config".source = <my/config/git/config>;
|
||||||
|
"git/ignore".source = <my/config/git/ignore>;
|
||||||
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,16 +1,13 @@
|
||||||
{ config, lib, pkgs, ... }:
|
{ config, lib, pkgs, ... }:
|
||||||
|
|
||||||
{
|
{
|
||||||
environment = {
|
my = {
|
||||||
extraInit = ''
|
packages = with pkgs; [
|
||||||
export GNUPGHOME="$XDG_CONFIG_HOME/gnupg"
|
|
||||||
mkdir -p "$GNUPGHOME" -m 700
|
|
||||||
'';
|
|
||||||
|
|
||||||
systemPackages = with pkgs; [
|
|
||||||
gnupg
|
gnupg
|
||||||
pinentry
|
pinentry
|
||||||
];
|
];
|
||||||
|
env.GNUPGHOME = "$XDG_CONFIG_HOME/gnupg";
|
||||||
|
init = "mkdir -p \"$GNUPGHOME\" -m 700";
|
||||||
};
|
};
|
||||||
|
|
||||||
programs.gnupg.agent = {
|
programs.gnupg.agent = {
|
||||||
|
@ -23,7 +20,7 @@
|
||||||
${pkgs.gnupg}/bin/gpg-agent \
|
${pkgs.gnupg}/bin/gpg-agent \
|
||||||
--supervised \
|
--supervised \
|
||||||
--allow-emacs-pinentry \
|
--allow-emacs-pinentry \
|
||||||
--default-cache-ttl 1200 \
|
--default-cache-ttl 1800 \
|
||||||
--pinentry-program ${pkgs.pinentry}/bin/pinentry-gtk-2
|
--pinentry-program ${pkgs.pinentry}/bin/pinentry-gtk-2
|
||||||
''
|
''
|
||||||
];
|
];
|
||||||
|
|
|
@ -1,14 +1,19 @@
|
||||||
{ config, lib, pkgs, ... }:
|
{ config, lib, pkgs, ... }:
|
||||||
|
|
||||||
{
|
{
|
||||||
environment.systemPackages = with pkgs; [
|
my.packages = with pkgs; [
|
||||||
(ncmpcpp.override { visualizerSupport = true; })
|
(ncmpcpp.override { visualizerSupport = true; })
|
||||||
];
|
];
|
||||||
|
|
||||||
home.xdg.configFile = {
|
my.env.MPD_HOME = "$XDG_CONFIG_HOME/mpd";
|
||||||
"zsh/rc.d/aliases.ncmpcpp.zsh".source = <config/ncmpcpp/aliases.zsh>;
|
my.env.NCMPCPP_HOME = "$XDG_CONFIG_HOME/ncmpcpp";
|
||||||
"zsh/rc.d/env.ncmpcpp.zsh".source = <config/ncmpcpp/env.zsh>;
|
|
||||||
"ncmpcpp/config".source = <config/ncmpcpp/config>;
|
my.alias.rate = "mpd-rate";
|
||||||
"ncmpcpp/bindings".source = <config/ncmpcpp/bindings>;
|
my.alias.mpcs = "mpc search any";
|
||||||
|
my.alias.mpcsp = "mpc searchplay any";
|
||||||
|
|
||||||
|
my.home.xdg.configFile = {
|
||||||
|
"ncmpcpp/config".source = <my/config/ncmpcpp/config>;
|
||||||
|
"ncmpcpp/bindings".source = <my/config/ncmpcpp/bindings>;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,14 +1,13 @@
|
||||||
{ config, pkgs, lib, ... }:
|
{ config, pkgs, lib, ... }:
|
||||||
|
|
||||||
{
|
{
|
||||||
environment = {
|
my = {
|
||||||
systemPackages = with pkgs; [
|
packages = with pkgs; [
|
||||||
(pass.withExtensions (exts: [
|
(pass.withExtensions (exts: [
|
||||||
exts.pass-otp
|
exts.pass-otp
|
||||||
exts.pass-genphrase
|
exts.pass-genphrase
|
||||||
]))
|
]))
|
||||||
];
|
];
|
||||||
|
env.PASSWORD_STORE_DIR = "$HOME/.secrets/password-store";
|
||||||
variables.PASSWORD_STORE_DIR = "$HOME/.secrets/password-store";
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,24 +1,23 @@
|
||||||
{ config, pkgs, libs, ... }:
|
{ config, pkgs, libs, ... }:
|
||||||
|
|
||||||
{
|
{
|
||||||
environment = {
|
my = {
|
||||||
systemPackages = with pkgs; [
|
packages = with pkgs; [
|
||||||
zsh
|
zsh
|
||||||
nix-zsh-completions
|
nix-zsh-completions
|
||||||
fasd
|
|
||||||
bat
|
bat
|
||||||
exa
|
exa
|
||||||
|
fasd
|
||||||
fd
|
fd
|
||||||
fzf
|
fzf
|
||||||
tmux
|
|
||||||
htop
|
htop
|
||||||
tree
|
|
||||||
tldr
|
tldr
|
||||||
|
tree
|
||||||
];
|
];
|
||||||
variables = {
|
env.ZDOTDIR = "$XDG_CONFIG_HOME/zsh";
|
||||||
ZDOTDIR = "$XDG_CONFIG_HOME/zsh";
|
env.ZSH_CACHE = "$XDG_CACHE_HOME/zsh";
|
||||||
ZSH_CACHE = "$XDG_CACHE_HOME/zsh";
|
|
||||||
};
|
home.xdg.configFile."zsh" = { source = <my/config/zsh>; recursive = true; };
|
||||||
};
|
};
|
||||||
|
|
||||||
programs.zsh = {
|
programs.zsh = {
|
||||||
|
@ -27,13 +26,4 @@
|
||||||
enableGlobalCompInit = false; # I'll do it myself
|
enableGlobalCompInit = false; # I'll do it myself
|
||||||
promptInit = "";
|
promptInit = "";
|
||||||
};
|
};
|
||||||
|
|
||||||
home.xdg.configFile = {
|
|
||||||
# link recursively so other modules can link files in this folder,
|
|
||||||
# particularly in zsh/rc.d/*.zsh
|
|
||||||
"zsh" = {
|
|
||||||
source = <config/zsh>;
|
|
||||||
recursive = true;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
82
modules/themes/aquanaut/default.nix
Normal file
82
modules/themes/aquanaut/default.nix
Normal file
|
@ -0,0 +1,82 @@
|
||||||
|
# We trained for this. The waves shudder and glare at me through its bright
|
||||||
|
# tapestry. The clouds see me off as gravity lures me in lazily. How long have I
|
||||||
|
# been down here? I imagined Jenny leading the team back on a rescue mission and
|
||||||
|
# it upsets me. It was not worth the risk. We knew what we signed up for.
|
||||||
|
#
|
||||||
|
# I hear glass crack. The sea depths hold my waist in a vice. Its strength
|
||||||
|
# squeezing between the kelvar pockets of my suit. It's hard to breathe. If I
|
||||||
|
# cut off the oxygen supply perhaps it'd be a nicer way to go.
|
||||||
|
#
|
||||||
|
# When did I get so creative?
|
||||||
|
#
|
||||||
|
# I can't see further than three feet. Snowflake fractures creep along my visor.
|
||||||
|
# Would Jorgen be relieved to have a dorm bunk to himself? HQ packs us into our
|
||||||
|
# subs like sardines. I'll miss his snoring. Maybe I'll catch up on all that
|
||||||
|
# missed sleep.
|
||||||
|
|
||||||
|
{ config, pkgs, ... }:
|
||||||
|
{
|
||||||
|
imports = [ ../. ]; # Load framework for themes
|
||||||
|
|
||||||
|
theme.wallpaper = ./wallpaper.jpg;
|
||||||
|
|
||||||
|
services.compton = {
|
||||||
|
activeOpacity = "0.96";
|
||||||
|
inactiveOpacity = "0.75";
|
||||||
|
settings = {
|
||||||
|
blur-background = true;
|
||||||
|
blur-background-frame = true;
|
||||||
|
blur-background-fixed = true;
|
||||||
|
blur-kern = "7x7box";
|
||||||
|
blur-strength = 340;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
services.xserver.displayManager.lightdm = {
|
||||||
|
greeters.mini.extraConfig = ''
|
||||||
|
text-color = "#bbc2cf"
|
||||||
|
password-background-color = "#29323d"
|
||||||
|
window-color = "#0b1117"
|
||||||
|
border-color = "#0b1117"
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
fonts.fonts = [ pkgs.nerdfonts ];
|
||||||
|
my.packages = with pkgs; [
|
||||||
|
nordic
|
||||||
|
paper-icon-theme # for rofi
|
||||||
|
];
|
||||||
|
my.home.xdg.configFile = {
|
||||||
|
"bspwm/rc.d/polybar".source = ./polybar/run.sh;
|
||||||
|
"bspwm/rc.d/theme".source = ./bspwmrc;
|
||||||
|
"dunst/dunstrc".source = ./dunstrc;
|
||||||
|
"polybar" = { source = ./polybar; recursive = true; };
|
||||||
|
"rofi/theme".source = ./rofi;
|
||||||
|
"tmux/theme".source = ./tmux.conf;
|
||||||
|
"xtheme/90-theme".source = ./Xresources;
|
||||||
|
"zsh/prompt.zsh".source = ./zsh/prompt.zsh;
|
||||||
|
# GTK
|
||||||
|
"gtk-3.0/settings.ini".text = ''
|
||||||
|
[Settings]
|
||||||
|
gtk-theme-name=Nordic-blue
|
||||||
|
gtk-icon-theme-name=Paper
|
||||||
|
gtk-fallback-icon-theme=gnome
|
||||||
|
gtk-application-prefer-dark-theme=true
|
||||||
|
gtk-cursor-theme-name=Paper
|
||||||
|
gtk-xft-hinting=1
|
||||||
|
gtk-xft-hintstyle=hintfull
|
||||||
|
gtk-xft-rgba=none
|
||||||
|
'';
|
||||||
|
# GTK2 global theme (widget and icon theme)
|
||||||
|
"gtk-2.0/gtkrc".text = ''
|
||||||
|
gtk-theme-name="Nordic-blue"
|
||||||
|
gtk-icon-theme-name="Paper-Mono-Dark"
|
||||||
|
gtk-font-name="Sans 10"
|
||||||
|
'';
|
||||||
|
# QT4/5 global theme
|
||||||
|
"Trolltech.conf".text = ''
|
||||||
|
[Qt]
|
||||||
|
style=Nordic-blue
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
}
|
3
modules/themes/aquanaut/rofi/filemenu.rasi
Normal file
3
modules/themes/aquanaut/rofi/filemenu.rasi
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
/* -*- mode: css; -*- */
|
||||||
|
|
||||||
|
@import "appmenu.rasi"
|
28
modules/themes/aquanaut/rofi/powermenu.rasi
Normal file
28
modules/themes/aquanaut/rofi/powermenu.rasi
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
/** -*- mode: css; -*-
|
||||||
|
* This theme is intended for a 5 items wide menu on a 1920x1080 pixels resolution.
|
||||||
|
* You may have to tweak values such as the window padding if you have a different resolution.
|
||||||
|
*/
|
||||||
|
@import "appmenu.rasi"
|
||||||
|
|
||||||
|
#element {
|
||||||
|
padding: 30px;
|
||||||
|
background-color: @background-light;
|
||||||
|
}
|
||||||
|
#element.selected {
|
||||||
|
background-color: @accent;
|
||||||
|
text-color: @background;
|
||||||
|
}
|
||||||
|
#window {
|
||||||
|
/* padding: @option-5-window-padding; */
|
||||||
|
}
|
||||||
|
#listview {
|
||||||
|
/* spacing: @option-5-listview-spacing; */
|
||||||
|
/* lines: 5; */
|
||||||
|
columns: 1;
|
||||||
|
}
|
||||||
|
#window {
|
||||||
|
children: [ horibox ];
|
||||||
|
}
|
||||||
|
#horibox {
|
||||||
|
children: [ listview ];
|
||||||
|
}
|
60
modules/themes/aquanaut/tmux.conf
Normal file
60
modules/themes/aquanaut/tmux.conf
Normal file
|
@ -0,0 +1,60 @@
|
||||||
|
# -- THEME -------------------------------
|
||||||
|
|
||||||
|
# The statusbar
|
||||||
|
set -g status-position bottom
|
||||||
|
set -g status-justify centre
|
||||||
|
set -g status-bg default
|
||||||
|
set -g status-fg colour15
|
||||||
|
set -g status-interval 10
|
||||||
|
set -g status-attr dim
|
||||||
|
# set -g status-left '#[fg=colour236]_________________________'
|
||||||
|
set -g status-left '#[fg=colour236]―――――――――――――――――――――――――'
|
||||||
|
# set -g status-right "#[fg=colour236]#{prefix_highlight} #[fg=colour5] #S #[fg=colour236]──"
|
||||||
|
# set -g status-right '#[fg=colour236]_________________________'
|
||||||
|
set -g status-right '#[fg=colour236]―――――――――――――――――――――――――'
|
||||||
|
set -g status-right-length 12
|
||||||
|
set -g status-left-length 12
|
||||||
|
|
||||||
|
# The messages
|
||||||
|
set -g message-fg colour4
|
||||||
|
set -g message-bg colour237
|
||||||
|
set -g message-command-fg blue
|
||||||
|
set -g message-command-bg black
|
||||||
|
|
||||||
|
# loud or quiet?
|
||||||
|
set-option -g visual-activity off
|
||||||
|
set-option -g visual-bell off
|
||||||
|
set-option -g visual-silence off
|
||||||
|
set-window-option -g monitor-activity on
|
||||||
|
set-option -g bell-action none
|
||||||
|
|
||||||
|
# The modes
|
||||||
|
setw -g clock-mode-colour colour135
|
||||||
|
setw -g mode-attr bold
|
||||||
|
setw -g mode-fg colour196
|
||||||
|
setw -g mode-bg colour238
|
||||||
|
|
||||||
|
# The panes
|
||||||
|
set -g pane-border-fg colour235
|
||||||
|
# set -g pane-border-bg default
|
||||||
|
set -g pane-active-border-fg colour5
|
||||||
|
# set -g pane-active-border-bg default
|
||||||
|
|
||||||
|
setw -g window-status-current-fg colour2
|
||||||
|
setw -g window-status-current-bg default
|
||||||
|
# setw -g window-status-current-attr none
|
||||||
|
setw -g window-status-current-format ' #W '
|
||||||
|
|
||||||
|
setw -g window-status-fg colour236
|
||||||
|
setw -g window-status-bg default
|
||||||
|
setw -g window-status-attr none
|
||||||
|
# setw -g window-status-format '#[fg=colour8] #I #[fg=default]#W '
|
||||||
|
setw -g window-status-format ' #W '
|
||||||
|
|
||||||
|
setw -g window-status-activity-bg default
|
||||||
|
setw -g window-status-activity-fg colour240
|
||||||
|
setw -g window-status-activity-attr none
|
||||||
|
|
||||||
|
setw -g window-status-bell-attr bold
|
||||||
|
setw -g window-status-bell-fg colour255
|
||||||
|
setw -g window-status-bell-bg colour1
|
Before Width: | Height: | Size: 3.3 MiB After Width: | Height: | Size: 3.3 MiB |
|
@ -1,16 +1,17 @@
|
||||||
{ config, lib, pkgs, ... }:
|
{ config, lib, pkgs, ... }:
|
||||||
|
|
||||||
{
|
{
|
||||||
environment.variables = {
|
imports = [ <my/options/theme.nix> ];
|
||||||
|
|
||||||
|
# Try really hard to get QT to respect my GTK theme.
|
||||||
|
my.env = {
|
||||||
GTK_DATA_PREFIX = [ "${config.system.path}" ];
|
GTK_DATA_PREFIX = [ "${config.system.path}" ];
|
||||||
QT_QPA_PLATFORMTHEME = "gtk2";
|
QT_QPA_PLATFORMTHEME = "gtk2";
|
||||||
};
|
};
|
||||||
|
|
||||||
qt5 = {
|
qt5 = {
|
||||||
style = "gtk2";
|
style = "gtk2";
|
||||||
platformTheme = "gtk2";
|
platformTheme = "gtk2";
|
||||||
};
|
};
|
||||||
|
|
||||||
services.xserver.displayManager.sessionCommands = ''
|
services.xserver.displayManager.sessionCommands = ''
|
||||||
export GTK2_RC_FILES="$XDG_CONFIG_HOME/gtk-2.0/gtkrc"
|
export GTK2_RC_FILES="$XDG_CONFIG_HOME/gtk-2.0/gtkrc"
|
||||||
source "$XDG_CONFIG_HOME"/xsession/*.sh
|
source "$XDG_CONFIG_HOME"/xsession/*.sh
|
|
@ -1,8 +1,11 @@
|
||||||
{ config, lib, pkgs, ... }:
|
# For testing software or building my games for other OSes
|
||||||
|
|
||||||
|
{ config, lib, pkgs, ... }:
|
||||||
{
|
{
|
||||||
virtualisation.virtualbox.host = {
|
virtualisation.virtualbox.host = {
|
||||||
enable = true;
|
enable = true;
|
||||||
enableExtensionPack = true;
|
enableExtensionPack = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
my.user.extraGroups = [ "vboxusers" ];
|
||||||
}
|
}
|
84
options/my.nix
Normal file
84
options/my.nix
Normal file
|
@ -0,0 +1,84 @@
|
||||||
|
{ config, options, lib, utils, pkgs, ... }:
|
||||||
|
|
||||||
|
with lib;
|
||||||
|
{
|
||||||
|
imports = [ <home-manager/nixos> ];
|
||||||
|
|
||||||
|
options.my = {
|
||||||
|
username = mkOption {
|
||||||
|
type = types.str;
|
||||||
|
default = "hlissner";
|
||||||
|
};
|
||||||
|
|
||||||
|
home = mkOption {
|
||||||
|
type = options.home-manager.users.type.functor.wrapped;
|
||||||
|
default = {};
|
||||||
|
};
|
||||||
|
|
||||||
|
user = mkOption {
|
||||||
|
type = types.submodule;
|
||||||
|
default = {};
|
||||||
|
description = "My users.users.NAME submodule";
|
||||||
|
};
|
||||||
|
|
||||||
|
env = mkOption {
|
||||||
|
type = with types; attrsOf (either (either str path) (listOf (either str path)));
|
||||||
|
default = {};
|
||||||
|
description = "...";
|
||||||
|
apply = mapAttrs
|
||||||
|
(n: v: if isList v
|
||||||
|
then concatMapStringsSep ":" (x: toString x) v
|
||||||
|
else (toString v));
|
||||||
|
};
|
||||||
|
|
||||||
|
alias = mkOption {
|
||||||
|
type = with types; nullOr (attrsOf (nullOr (either str path)));
|
||||||
|
default = {};
|
||||||
|
description = "...";
|
||||||
|
};
|
||||||
|
|
||||||
|
packages = mkOption {
|
||||||
|
type = types.listOf types.package;
|
||||||
|
default = [];
|
||||||
|
description = "The set of packages to appear in the user environment.";
|
||||||
|
};
|
||||||
|
|
||||||
|
init = mkOption {
|
||||||
|
type = types.lines;
|
||||||
|
default = "";
|
||||||
|
description = "...";
|
||||||
|
};
|
||||||
|
|
||||||
|
zsh = {
|
||||||
|
rc = mkOption {
|
||||||
|
type = types.lines;
|
||||||
|
default = "";
|
||||||
|
description = "...";
|
||||||
|
};
|
||||||
|
env = mkOption {
|
||||||
|
type = types.lines;
|
||||||
|
default = "";
|
||||||
|
description = "...";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
config = {
|
||||||
|
users.users.${config.my.username} = mkAliasDefinitions options.my.user;
|
||||||
|
home-manager.users.${config.my.username} = mkAliasDefinitions options.my.home;
|
||||||
|
|
||||||
|
my.user.packages = config.my.packages;
|
||||||
|
my.env.PATH = [ "$PATH" ];
|
||||||
|
|
||||||
|
environment.shellAliases = config.my.alias;
|
||||||
|
environment.extraInit =
|
||||||
|
let exportLines = mapAttrsToList (n: v: "export ${n}=\"${v}\"") config.my.env;
|
||||||
|
in ''
|
||||||
|
${concatStringsSep "\n" exportLines}
|
||||||
|
${config.my.init}
|
||||||
|
'';
|
||||||
|
|
||||||
|
my.home.xdg.configFile."zsh/extra.zshrc".text = config.my.zsh.rc;
|
||||||
|
my.home.xdg.configFile."zsh/extra.zshenv".text = config.my.zsh.env;
|
||||||
|
};
|
||||||
|
}
|
29
options/theme.nix
Normal file
29
options/theme.nix
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
{ config, options, lib, pkgs, ... }:
|
||||||
|
|
||||||
|
with lib;
|
||||||
|
{
|
||||||
|
options.theme = {
|
||||||
|
wallpaper = mkOption {
|
||||||
|
type = with types; nullOr (either str path);
|
||||||
|
default = null;
|
||||||
|
description = "The wallpaper to use";
|
||||||
|
};
|
||||||
|
|
||||||
|
# TODO Colors?
|
||||||
|
};
|
||||||
|
|
||||||
|
config = {
|
||||||
|
# Set up wallpaper and blur/darken it for lock/login screen
|
||||||
|
my.home.home.file.".background-image".source = config.theme.wallpaper;
|
||||||
|
services.xserver.displayManager.lightdm.background =
|
||||||
|
let blurredWallpaper =
|
||||||
|
with pkgs; runCommand "blurWallpaper"
|
||||||
|
{ buildInputs = [ imagemagick ]; } ''
|
||||||
|
mkdir "$out"
|
||||||
|
convert -gaussian-blur 0x2 -modulate 70 -level 5% \
|
||||||
|
${config.theme.wallpaper} $out/wallpaper.blurred.png
|
||||||
|
'';
|
||||||
|
in mkIf (config.theme.wallpaper != null)
|
||||||
|
"${blurredWallpaper}/wallpaper.blurred.png";
|
||||||
|
};
|
||||||
|
}
|
BIN
secrets.nix.gpg
Normal file
BIN
secrets.nix.gpg
Normal file
Binary file not shown.
45
settings.nix
45
settings.nix
|
@ -1,45 +0,0 @@
|
||||||
{ config, options, lib, utils, pkgs, ... }:
|
|
||||||
|
|
||||||
with lib;
|
|
||||||
{
|
|
||||||
imports = [
|
|
||||||
<home-manager/nixos>
|
|
||||||
];
|
|
||||||
|
|
||||||
options = {
|
|
||||||
username = mkOption {
|
|
||||||
type = types.str;
|
|
||||||
default = "hlissner";
|
|
||||||
description = "My username";
|
|
||||||
};
|
|
||||||
|
|
||||||
home = mkOption {
|
|
||||||
type = options.home-manager.users.type.functor.wrapped;
|
|
||||||
default = {};
|
|
||||||
description = "Home-manager configuration for my user";
|
|
||||||
};
|
|
||||||
|
|
||||||
# TODO
|
|
||||||
# paths = mkOption {
|
|
||||||
# type = types.listOf types.path;
|
|
||||||
# default = [];
|
|
||||||
# description = "Custom PATH entries";
|
|
||||||
# };
|
|
||||||
|
|
||||||
my = mkOption {
|
|
||||||
type = types.listOf types.functor;
|
|
||||||
default = [];
|
|
||||||
description = "Nix config helpers";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
config = {
|
|
||||||
home-manager.users = {
|
|
||||||
${config.username} = mkAliasDefinitions options.home;
|
|
||||||
};
|
|
||||||
|
|
||||||
# environment.extraInit = ''
|
|
||||||
# export PATH="${lib.concatStringsSep ":" (map builtins.toString config.paths)}:$PATH"
|
|
||||||
# '';
|
|
||||||
};
|
|
||||||
}
|
|
|
@ -1,91 +0,0 @@
|
||||||
{ config, pkgs, ... }:
|
|
||||||
|
|
||||||
{
|
|
||||||
imports = [ ../. ]; # Load framework for themes
|
|
||||||
|
|
||||||
environment.systemPackages = with pkgs; [
|
|
||||||
nordic
|
|
||||||
paper-icon-theme # for rofi
|
|
||||||
];
|
|
||||||
|
|
||||||
fonts.fonts = [ pkgs.nerdfonts ];
|
|
||||||
|
|
||||||
services.compton = {
|
|
||||||
backend = "glx";
|
|
||||||
activeOpacity = "0.96";
|
|
||||||
inactiveOpacity = "0.75";
|
|
||||||
opacityRules = [
|
|
||||||
"100:class_g = 'Firefox'"
|
|
||||||
"100:class_g = 'Gimp'"
|
|
||||||
"100:class_g = 'inkscape'"
|
|
||||||
"100:class_g = 'aseprite'"
|
|
||||||
"100:class_g = 'krita'"
|
|
||||||
"100:class_g = 'Peek'"
|
|
||||||
"100:class_g = 'feh'"
|
|
||||||
"100:class_g = 'mpv'"
|
|
||||||
];
|
|
||||||
settings = {
|
|
||||||
blur-background = true;
|
|
||||||
blur-background-frame = true;
|
|
||||||
blur-background-fixed = true;
|
|
||||||
blur-kern = "7x7box";
|
|
||||||
blur-strength = 340;
|
|
||||||
blur-background-exclude = [
|
|
||||||
"window_type = 'dock'"
|
|
||||||
"window_type = 'desktop'"
|
|
||||||
"class_g = 'Peek'"
|
|
||||||
"_GTK_FRAME_EXTENTS@:c"
|
|
||||||
];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
services.xserver.displayManager.lightdm = {
|
|
||||||
background = "${./wallpaper.blurred.jpg}";
|
|
||||||
greeters.mini.extraConfig = ''
|
|
||||||
text-color = "#bbc2cf"
|
|
||||||
password-background-color = "#29323d"
|
|
||||||
window-color = "#0b1117"
|
|
||||||
border-color = "#0b1117"
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
|
|
||||||
home = {
|
|
||||||
home.file.".background-image".source = ./wallpaper.jpg;
|
|
||||||
|
|
||||||
xdg.configFile = {
|
|
||||||
"xtheme/90-theme".source = ./Xresources;
|
|
||||||
"dunst/dunstrc".source = ./dunstrc;
|
|
||||||
"bspwm/rc.d/theme".source = ./bspwmrc;
|
|
||||||
"bspwm/rc.d/polybar".source = ./polybar/run.sh;
|
|
||||||
"polybar" = { source = ./polybar; recursive = true; };
|
|
||||||
"rofi/theme" = { source = ./rofi; recursive = true; };
|
|
||||||
"zsh/prompt.zsh".source = ./zsh/prompt.zsh;
|
|
||||||
|
|
||||||
# GTK
|
|
||||||
"gtk-3.0/settings.ini".text = ''
|
|
||||||
[Settings]
|
|
||||||
gtk-theme-name=Nordic-blue
|
|
||||||
gtk-icon-theme-name=Paper
|
|
||||||
gtk-fallback-icon-theme=gnome
|
|
||||||
gtk-application-prefer-dark-theme=true
|
|
||||||
gtk-cursor-theme-name=Paper
|
|
||||||
gtk-xft-hinting=1
|
|
||||||
gtk-xft-hintstyle=hintfull
|
|
||||||
gtk-xft-rgba=none
|
|
||||||
'';
|
|
||||||
|
|
||||||
# GTK2 global theme (widget and icon theme)
|
|
||||||
"gtk-2.0/gtkrc".text = ''
|
|
||||||
gtk-theme-name="Nordic-blue"
|
|
||||||
gtk-icon-theme-name="Paper-Mono-Dark"
|
|
||||||
gtk-font-name="Sans 10"
|
|
||||||
'';
|
|
||||||
|
|
||||||
# QT4/5 global theme
|
|
||||||
"Trolltech.conf".text = ''
|
|
||||||
[Qt]
|
|
||||||
style=Nordic-blue
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
Binary file not shown.
Before Width: | Height: | Size: 718 KiB |
|
@ -1,66 +0,0 @@
|
||||||
!! Colors
|
|
||||||
#define blk #21242b
|
|
||||||
#define bblk #969896
|
|
||||||
#define red #cc6666
|
|
||||||
#define bred #de935f
|
|
||||||
#define grn #b5bd68
|
|
||||||
#define bgrn #757d28
|
|
||||||
#define ylw #f0c674
|
|
||||||
#define bylw #f9a03f
|
|
||||||
#define blu #81a2be
|
|
||||||
#define bblu #2a8fed
|
|
||||||
#define mag #b294bb
|
|
||||||
#define bmag #bc77a8
|
|
||||||
#define cyn #8abeb7
|
|
||||||
#define bcyn #a3685a
|
|
||||||
#define wht #c5c8c6
|
|
||||||
#define bwht #ffffff
|
|
||||||
#define bg blk
|
|
||||||
#define fg wht
|
|
||||||
|
|
||||||
*.foreground: fg
|
|
||||||
*.background: bg
|
|
||||||
*.cursorColor: mag
|
|
||||||
|
|
||||||
*.color0: blk
|
|
||||||
*.color8: bblk
|
|
||||||
*.color1: red
|
|
||||||
*.color9: bred
|
|
||||||
*.color2: grn
|
|
||||||
*.color10: bgrn
|
|
||||||
*.color3: ylw
|
|
||||||
*.color11: bylw
|
|
||||||
*.color4: blu
|
|
||||||
*.color12: bblu
|
|
||||||
*.color5: mag
|
|
||||||
*.color13: bmag
|
|
||||||
*.color6: cyn
|
|
||||||
*.color14: bcyn
|
|
||||||
*.color7: wht
|
|
||||||
*.color15: bwht
|
|
||||||
|
|
||||||
! greys
|
|
||||||
*.color234: #1d2021
|
|
||||||
*.color235: #282828
|
|
||||||
*.color236: #32302f
|
|
||||||
*.color237: #3c3836
|
|
||||||
*.color239: #504945
|
|
||||||
*.color240: #544c49
|
|
||||||
*.color241: #665c54
|
|
||||||
|
|
||||||
|
|
||||||
!! Fonts
|
|
||||||
st.font: Fira Code:pixelsize=13
|
|
||||||
rofi.font: Fira Code 15
|
|
||||||
|
|
||||||
|
|
||||||
!! Rofi
|
|
||||||
rofi.padding: 12
|
|
||||||
! bg fg bgalt hlbg hlfg
|
|
||||||
rofi.color-normal: argb:00292d35, #bbc2cf, #292d35, #141411, #f8f8f2
|
|
||||||
rofi.color-urgent: argb:00292d35, #bbc2cf, #292d35, #f92672, #f8f8f2
|
|
||||||
rofi.color-active: argb:00292d35, #bbc2cf, #292d35, #141411, #a6e22a
|
|
||||||
! bg border sep
|
|
||||||
rofi.color-window: argb:ee292d35, argb:00bbc2cf, #292d35
|
|
||||||
! Separator style (none, dash, solid)
|
|
||||||
rofi.separator-style: solid
|
|
|
@ -1,42 +0,0 @@
|
||||||
{ config, pkgs, ... }:
|
|
||||||
|
|
||||||
{
|
|
||||||
imports = [ ../. ]; # Load framework for themes
|
|
||||||
|
|
||||||
environment.systemPackages = with pkgs; [ arc-theme ];
|
|
||||||
|
|
||||||
home = {
|
|
||||||
home.file.".background-image".source = ./wallpaper.jpg;
|
|
||||||
|
|
||||||
xdg.configFile = {
|
|
||||||
"xtheme/90-theme".source = ./Xresources;
|
|
||||||
"dunst/dunstrc".source = ./dunstrc;
|
|
||||||
|
|
||||||
# GTK
|
|
||||||
"gtk-3.0/settings.ini".text = ''
|
|
||||||
[Settings]
|
|
||||||
gtk-theme-name=Arc-Dark
|
|
||||||
gtk-icon-theme-name=Arc-Dark
|
|
||||||
gtk-fallback-icon-theme=gnome
|
|
||||||
gtk-application-prefer-dark-theme=true
|
|
||||||
gtk-cursor-theme-name=Numix
|
|
||||||
gtk-xft-hinting=1
|
|
||||||
gtk-xft-hintstyle=hintfull
|
|
||||||
gtk-xft-rgba=none
|
|
||||||
'';
|
|
||||||
|
|
||||||
# GTK2 global theme (widget and icon theme)
|
|
||||||
"gtk-2.0/gtkrc".text = ''
|
|
||||||
gtk-theme-name="Arc-Dark"
|
|
||||||
gtk-icon-theme-name="adwaita"
|
|
||||||
gtk-font-name="Sans 10"
|
|
||||||
'';
|
|
||||||
|
|
||||||
# QT4/5 global theme
|
|
||||||
"Trolltech.conf".text = ''
|
|
||||||
[Qt]
|
|
||||||
style=Arc-Dark
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
|
@ -1,57 +0,0 @@
|
||||||
[global]
|
|
||||||
alignment = left
|
|
||||||
markup = full
|
|
||||||
bounce_freq = 0
|
|
||||||
browser = firefox -new-tab
|
|
||||||
dmenu = rofi -dmenu -p dunst:
|
|
||||||
follow = none
|
|
||||||
font = Fira Code 14
|
|
||||||
# font = Misc Tamsyn 12
|
|
||||||
format = "%s\n%b"
|
|
||||||
# geometry [{width}]x{height}][+/-{x}+/-{y}]
|
|
||||||
geometry = "365x15-21+21"
|
|
||||||
history_length = 20
|
|
||||||
horizontal_padding = 16
|
|
||||||
idle_threshold = 120
|
|
||||||
ignore_newline = no
|
|
||||||
indicate_hidden = yes
|
|
||||||
line_height = 0
|
|
||||||
monitor = 0
|
|
||||||
padding = 12
|
|
||||||
separator_color = "#18191b"
|
|
||||||
separator_height = 2
|
|
||||||
show_age_threshold = 60
|
|
||||||
show_indicators = yes
|
|
||||||
shrink = no
|
|
||||||
sort = yes
|
|
||||||
startup_notification = false
|
|
||||||
sticky_history = yes
|
|
||||||
transparency = 1
|
|
||||||
word_wrap = yes
|
|
||||||
max_icon_size = 64
|
|
||||||
# Align icons left/right/off
|
|
||||||
icon_position = right
|
|
||||||
# Paths to default icons.
|
|
||||||
icon_path = /usr/share/icons/hicolor/32x32/apps/:/usr/share/icons/Adwaita/32x32/actions/
|
|
||||||
frame_width = 0
|
|
||||||
frame_color = "#131416"
|
|
||||||
|
|
||||||
[shortcuts]
|
|
||||||
context = ctrl+shift+period
|
|
||||||
|
|
||||||
[urgency_low]
|
|
||||||
# IMPORTANT: colors have to be defined in quotation marks.
|
|
||||||
# Otherwise the "#" and following would be interpreted as a comment.
|
|
||||||
background = "#0a0b0c"
|
|
||||||
foreground = "#b5bd68"
|
|
||||||
timeout = 8
|
|
||||||
|
|
||||||
[urgency_normal]
|
|
||||||
background = "#b5bd68"
|
|
||||||
foreground = "#131416"
|
|
||||||
timeout = 14
|
|
||||||
|
|
||||||
[urgency_critical]
|
|
||||||
background = "#cc6666"
|
|
||||||
foreground = "#131416"
|
|
||||||
timeout = 0
|
|
|
@ -1,336 +0,0 @@
|
||||||
[colors]
|
|
||||||
bg = ${xrdb:background}
|
|
||||||
fg = ${xrdb:foreground}
|
|
||||||
black = ${xrdb:color0}
|
|
||||||
bblack = ${xrdb:color8}
|
|
||||||
red = ${xrdb:color1}
|
|
||||||
bred = ${xrdb:color9}
|
|
||||||
green = ${xrdb:color2}
|
|
||||||
bgreen = ${xrdb:color10}
|
|
||||||
yellow = ${xrdb:color3}
|
|
||||||
byellow = ${xrdb:color11}
|
|
||||||
blue = ${xrdb:color4}
|
|
||||||
bblue = ${xrdb:color12}
|
|
||||||
magenta = ${xrdb:color5}
|
|
||||||
bmagenta = ${xrdb:color13}
|
|
||||||
cyan = ${xrdb:color6}
|
|
||||||
bcyan = ${xrdb:color14}
|
|
||||||
white = ${xrdb:color7}
|
|
||||||
bwhite = ${xrdb:color15}
|
|
||||||
|
|
||||||
bg-alt = #0F1013
|
|
||||||
fg-alt = #25282a
|
|
||||||
icons = #555856
|
|
||||||
alert = ${colors.red}
|
|
||||||
|
|
||||||
[global/wm]
|
|
||||||
margin-top = 0
|
|
||||||
margin-bottom = 24
|
|
||||||
|
|
||||||
[bar/main]
|
|
||||||
monitor = ${env:MONITOR}
|
|
||||||
monitor-strict = true
|
|
||||||
enable-ipc = true
|
|
||||||
wm-restack = bspwm
|
|
||||||
# REQUIRED to move the window with hideit.sh
|
|
||||||
override-redirect = true
|
|
||||||
|
|
||||||
background =
|
|
||||||
foreground = ${colors.fg}
|
|
||||||
|
|
||||||
width = 100%
|
|
||||||
height = 24
|
|
||||||
offset-x = 0
|
|
||||||
offset-y = 8
|
|
||||||
bottom = 1
|
|
||||||
|
|
||||||
overline-size = 0
|
|
||||||
overline-color = #f00
|
|
||||||
underline-size = 0
|
|
||||||
underline-color = #00f
|
|
||||||
|
|
||||||
border-bottom-size = 0
|
|
||||||
|
|
||||||
padding-left = 2
|
|
||||||
padding-right = 2
|
|
||||||
module-margin-left = 0
|
|
||||||
module-margin-right = 0
|
|
||||||
|
|
||||||
font-0 = "Fira Code:pixelsize=9;2"
|
|
||||||
font-1 = "Wuncon Siji:pixelsize=12;2"
|
|
||||||
font-2 = "Siji:pixelsize=10;2"
|
|
||||||
|
|
||||||
; modules-left = volume pad cpu memory pad pkg mail
|
|
||||||
modules-left = volume pad cpu memory
|
|
||||||
modules-center = bspwm
|
|
||||||
; modules-right = battery wlan app-rslsync app-redshift pad date
|
|
||||||
modules-right = battery wlan app-redshift pad date
|
|
||||||
|
|
||||||
;tray-position = center
|
|
||||||
;tray-padding = 2
|
|
||||||
;tray-transparent = true
|
|
||||||
;tray-background = #0063ff
|
|
||||||
|
|
||||||
[module/bspwm]
|
|
||||||
type = internal/bspwm
|
|
||||||
pin-workspaces = true
|
|
||||||
enable-click = true
|
|
||||||
|
|
||||||
ws-icon-0 = 1;
|
|
||||||
ws-icon-1 = 2;
|
|
||||||
ws-icon-2 = 3;
|
|
||||||
ws-icon-3 = 4;
|
|
||||||
ws-icon-4 = 5;
|
|
||||||
ws-icon-default = x
|
|
||||||
|
|
||||||
format = <label-state> <label-mode>
|
|
||||||
label-padding = 1
|
|
||||||
|
|
||||||
label-focused = %icon%
|
|
||||||
label-focused-background = #33000000
|
|
||||||
label-focused-foreground = ${colors.green}
|
|
||||||
; label-focused-underline = ${colors.magenta}
|
|
||||||
; label-focused-foreground = ${xrdb:color2}
|
|
||||||
label-focused-padding = 1
|
|
||||||
|
|
||||||
label-occupied = %icon%
|
|
||||||
label-occupied-foreground = ${colors.icons}
|
|
||||||
label-occupied-padding = 1
|
|
||||||
|
|
||||||
; label-urgent = %icon%
|
|
||||||
label-urgent-foreground = ${colors.red}
|
|
||||||
; label-urgent-background = ${colors.alert}
|
|
||||||
label-urgent-padding = 1
|
|
||||||
|
|
||||||
label-empty = %icon%
|
|
||||||
label-empty-foreground = ${colors.fg-alt}
|
|
||||||
label-empty-padding = 1
|
|
||||||
|
|
||||||
[module/date]
|
|
||||||
type = internal/date
|
|
||||||
interval = 5
|
|
||||||
|
|
||||||
label = %date% %time%
|
|
||||||
date = %A, %h %d
|
|
||||||
date-alt = %Y-%m-%d
|
|
||||||
time = %I:%M %p
|
|
||||||
time-alt = %H:%M:%S
|
|
||||||
format-prefix = ""
|
|
||||||
format-prefix-padding = 1
|
|
||||||
; format-prefix-background = ${colors.bg-alt}
|
|
||||||
format-prefix-foreground = ${colors.icons}
|
|
||||||
; format-underline = ${xrdb:color4}
|
|
||||||
|
|
||||||
[module/xwindow]
|
|
||||||
type = internal/xwindow
|
|
||||||
label = %title:0:80:...%
|
|
||||||
label-padding-left = 2
|
|
||||||
|
|
||||||
; [module/mpd]
|
|
||||||
; type = internal/mpd
|
|
||||||
; host = /home/hlissner/.config/mpd/mpd.sock
|
|
||||||
;
|
|
||||||
; format-online = <label-song> <toggle>
|
|
||||||
; format-padding = 5
|
|
||||||
;
|
|
||||||
; label-song-maxlen = 45
|
|
||||||
; label-song-ellipsis = true
|
|
||||||
;
|
|
||||||
; icon-prev =
|
|
||||||
; icon-seekb =
|
|
||||||
; icon-stop =
|
|
||||||
; icon-play =
|
|
||||||
; icon-pause =
|
|
||||||
; icon-next =
|
|
||||||
; icon-seekf =
|
|
||||||
;
|
|
||||||
; icon-random =
|
|
||||||
; icon-repeat =
|
|
||||||
;
|
|
||||||
; toggle-on-foreground = ${colors.fg}
|
|
||||||
; toggle-off-foreground = #66
|
|
||||||
|
|
||||||
[module/cpu]
|
|
||||||
type = internal/cpu
|
|
||||||
interval = 2
|
|
||||||
format = <bar-load>
|
|
||||||
format-prefix = ""
|
|
||||||
format-foreground = ${colors.icons}
|
|
||||||
; format-underline = #f90000
|
|
||||||
; label = %percentage%%
|
|
||||||
format-padding = 1
|
|
||||||
|
|
||||||
bar-load-indicator =
|
|
||||||
bar-load-width = 6
|
|
||||||
bar-load-foreground-0 = ${colors.green}
|
|
||||||
bar-load-foreground-1 = ${colors.green}
|
|
||||||
bar-load-foreground-2 = ${colors.yellow}
|
|
||||||
bar-load-foreground-3 = ${colors.red}
|
|
||||||
bar-load-foreground-4 = ${colors.red}
|
|
||||||
bar-load-fill = |
|
|
||||||
bar-load-empty = ¦
|
|
||||||
bar-load-empty-foreground = ${colors.fg-alt}
|
|
||||||
|
|
||||||
[module/memory]
|
|
||||||
type = internal/memory
|
|
||||||
interval = 3
|
|
||||||
format = <bar-used>
|
|
||||||
format-prefix = ""
|
|
||||||
format-prefix-foreground = ${colors.icons}
|
|
||||||
; format-underline = #4bffdc
|
|
||||||
; label = %percentage_used%%
|
|
||||||
format-padding-left = 1
|
|
||||||
|
|
||||||
; Only applies if <bar-used> is used
|
|
||||||
bar-used-indicator =
|
|
||||||
bar-used-width = 6
|
|
||||||
bar-used-foreground-0 = ${colors.green}
|
|
||||||
bar-used-foreground-1 = ${colors.green}
|
|
||||||
bar-used-foreground-2 = ${colors.yellow}
|
|
||||||
bar-used-foreground-3 = ${colors.red}
|
|
||||||
bar-used-foreground-4 = ${colors.red}
|
|
||||||
bar-used-fill = |
|
|
||||||
bar-used-empty = ¦
|
|
||||||
bar-used-empty-foreground = ${colors.fg-alt}
|
|
||||||
|
|
||||||
[module/wlan]
|
|
||||||
type = internal/network
|
|
||||||
interface = ${env:WLP:wlp3s0}
|
|
||||||
interval = 3.0
|
|
||||||
|
|
||||||
format-connected = <ramp-signal>
|
|
||||||
format-disconnected = !
|
|
||||||
format-disconnected-foreground = ${colors.red}
|
|
||||||
|
|
||||||
; label-connected =
|
|
||||||
; label-disconnected = !
|
|
||||||
; label-disconnected-foreground = ${colors.red}
|
|
||||||
|
|
||||||
ramp-signal-0 =
|
|
||||||
ramp-signal-0-foreground = ${colors.yellow}
|
|
||||||
ramp-signal-1 =
|
|
||||||
ramp-signal-1-foreground = ${colors.yellow}
|
|
||||||
ramp-signal-2 =
|
|
||||||
ramp-signal-2-foreground = ${colors.yellow}
|
|
||||||
ramp-signal-3 =
|
|
||||||
ramp-signal-3-foreground = ${colors.icons}
|
|
||||||
ramp-signal-4 =
|
|
||||||
ramp-signal-4-foreground = ${colors.icons}
|
|
||||||
|
|
||||||
; [module/eth]
|
|
||||||
; type = internal/network
|
|
||||||
; interface = ${env:ETH:enp2s0}
|
|
||||||
; interval = 4.0
|
|
||||||
;
|
|
||||||
; ; format-connected-underline = #55aa55
|
|
||||||
; ; format-connected-prefix = " "
|
|
||||||
; format-connected-foreground-foreground = ${colors.fg-alt}
|
|
||||||
; label-connected = %local_ip%
|
|
||||||
;
|
|
||||||
; format-disconnected-underline = ${self.format-connected-underline}
|
|
||||||
; label-disconnected = %ifname% disconnected
|
|
||||||
; label-disconnected-foreground = ${colors.fg-alt}
|
|
||||||
|
|
||||||
[module/volume]
|
|
||||||
type = internal/volume
|
|
||||||
|
|
||||||
; format-volume = <label-volume> <bar-volume>
|
|
||||||
format-volume = <ramp-volume> <bar-volume>
|
|
||||||
; label-volume = " "
|
|
||||||
label-volume-foreground = ${colors.fg}
|
|
||||||
|
|
||||||
; format-muted-prefix = " "
|
|
||||||
format-muted-foreground = ${colors.red}
|
|
||||||
label-muted =
|
|
||||||
|
|
||||||
bar-volume-width = 8
|
|
||||||
bar-volume-foreground-0 = ${colors.blue}
|
|
||||||
bar-volume-foreground-1 = ${colors.blue}
|
|
||||||
bar-volume-foreground-2 = ${colors.blue}
|
|
||||||
bar-volume-foreground-3 = ${colors.blue}
|
|
||||||
bar-volume-foreground-4 = ${colors.blue}
|
|
||||||
bar-volume-foreground-5 = ${colors.blue}
|
|
||||||
bar-volume-foreground-6 = ${colors.blue}
|
|
||||||
bar-volume-gradient = false
|
|
||||||
bar-volume-indicator = |
|
|
||||||
bar-volume-indicator-font = 2
|
|
||||||
bar-volume-indicator-foreground = #ff
|
|
||||||
bar-volume-fill = ─
|
|
||||||
bar-volume-fill-font = 2
|
|
||||||
bar-volume-empty = ─
|
|
||||||
bar-volume-empty-font = 2
|
|
||||||
bar-volume-empty-foreground = ${colors.fg-alt}
|
|
||||||
|
|
||||||
; Only applies if <ramp-volume> is used
|
|
||||||
ramp-volume-0 =
|
|
||||||
ramp-volume-1 =
|
|
||||||
ramp-volume-2 =
|
|
||||||
|
|
||||||
[module/battery]
|
|
||||||
type = internal/battery
|
|
||||||
battery = BAT0
|
|
||||||
adapter = ADP1
|
|
||||||
full-at = 98
|
|
||||||
|
|
||||||
format-charging = <animation-charging> <label-charging>
|
|
||||||
format-charging-underline = #ffb52a
|
|
||||||
|
|
||||||
format-discharging = <ramp-capacity> <label-discharging>
|
|
||||||
format-discharging-underline = ${self.format-charging-underline}
|
|
||||||
|
|
||||||
format-full-prefix = " "
|
|
||||||
format-full-prefix-foreground = ${colors.fg-alt}
|
|
||||||
format-full-underline = ${self.format-charging-underline}
|
|
||||||
|
|
||||||
ramp-capacity-0 =
|
|
||||||
ramp-capacity-1 =
|
|
||||||
ramp-capacity-2 =
|
|
||||||
ramp-capacity-foreground = ${colors.fg-alt}
|
|
||||||
|
|
||||||
animation-charging-0 =
|
|
||||||
animation-charging-1 =
|
|
||||||
animation-charging-2 =
|
|
||||||
animation-charging-foreground = ${colors.fg-alt}
|
|
||||||
animation-charging-framerate = 750
|
|
||||||
|
|
||||||
|
|
||||||
;=====================================================
|
|
||||||
; Custom scripts
|
|
||||||
;=====================================================
|
|
||||||
|
|
||||||
[module/pad]
|
|
||||||
type = custom/text
|
|
||||||
content = " "
|
|
||||||
content-foreground = ${colors.fg-alt}
|
|
||||||
|
|
||||||
[module/pkg]
|
|
||||||
type = custom/ipc
|
|
||||||
hook-0 = ~/.config/polybar/modules/updates
|
|
||||||
initial = 1
|
|
||||||
click-left = polybar-msg -p %pid% hook pkg 1
|
|
||||||
format-padding = 1
|
|
||||||
|
|
||||||
[module/mail]
|
|
||||||
type = custom/ipc
|
|
||||||
hook-0 = ~/.config/polybar/modules/mail
|
|
||||||
initial = 1
|
|
||||||
click-left = polybar-msg -p %pid% hook mail 1
|
|
||||||
format-padding-right = 1
|
|
||||||
|
|
||||||
[module/app-redshift]
|
|
||||||
type = custom/script
|
|
||||||
exec = echo 1
|
|
||||||
exec-if = pgrep -x redshift
|
|
||||||
format = ""
|
|
||||||
format-foreground = ${colors.icons}
|
|
||||||
interval = 2
|
|
||||||
|
|
||||||
[module/app-rslsync]
|
|
||||||
type = custom/script
|
|
||||||
exec = echo 1
|
|
||||||
exec-if = pgrep -x rslsync
|
|
||||||
format = ""
|
|
||||||
format-foreground = ${colors.icons}
|
|
||||||
interval = 60
|
|
||||||
|
|
||||||
; vim:ft=dosini
|
|
|
@ -1,21 +0,0 @@
|
||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
# Specifying the icon(s) in the script
|
|
||||||
# This allows us to change its appearance conditionally
|
|
||||||
pgrep -x redshift &> /dev/null
|
|
||||||
if [[ $? -eq 0 ]]; then
|
|
||||||
temp=$(redshift -p 2>/dev/null | grep temp | cut -d' ' -f3)
|
|
||||||
temp=${temp//K/}
|
|
||||||
fi
|
|
||||||
|
|
||||||
# OPTIONAL: Append ' ${temp}K' after $icon
|
|
||||||
if [[ -z $temp ]]; then
|
|
||||||
echo "%{F#65737E}$icon" # Greyed out (not running)
|
|
||||||
elif [[ $temp -ge 5000 ]]; then
|
|
||||||
echo "%{F#8FA1B3}$icon" # Blue
|
|
||||||
elif [[ $temp -ge 4000 ]]; then
|
|
||||||
echo "%{F#EBCB8B}$icon" # Yellow
|
|
||||||
else
|
|
||||||
echo "%{F#D08770}$icon" # Orange
|
|
||||||
fi
|
|
||||||
|
|
|
@ -1,9 +0,0 @@
|
||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
icon=""
|
|
||||||
|
|
||||||
if pgrep -x rslsync &> /dev/null; then
|
|
||||||
echo "%{F#e5e8e6}$icon"
|
|
||||||
else
|
|
||||||
echo "%{F#65737E}$icon"
|
|
||||||
fi
|
|
|
@ -1,92 +0,0 @@
|
||||||
#!/usr/bin/env python3
|
|
||||||
|
|
||||||
import imaplib
|
|
||||||
import os
|
|
||||||
import sys
|
|
||||||
import socket
|
|
||||||
from subprocess import Popen
|
|
||||||
|
|
||||||
CONFIG_FILE = os.path.expanduser("~/.secrets/email")
|
|
||||||
CACHE_FILE = "/tmp/polybar-mail"
|
|
||||||
ICON = ""
|
|
||||||
|
|
||||||
try:
|
|
||||||
import gnupg
|
|
||||||
from pathlib import Path
|
|
||||||
except ImportError:
|
|
||||||
print("%{{F{}}}*".format("#555856", ICON))
|
|
||||||
sys.exit(1)
|
|
||||||
|
|
||||||
|
|
||||||
#
|
|
||||||
def internet_is_on():
|
|
||||||
try:
|
|
||||||
host = socket.gethostbyname("www.google.com")
|
|
||||||
socket.create_connection((host, 80), 2)
|
|
||||||
return True
|
|
||||||
except:
|
|
||||||
pass
|
|
||||||
return False
|
|
||||||
|
|
||||||
|
|
||||||
def unread_count(address, password):
|
|
||||||
imap = imaplib.IMAP4_SSL('imap.gmail.com', 993)
|
|
||||||
imap.login(address, password)
|
|
||||||
imap.select('INBOX')
|
|
||||||
|
|
||||||
status, resp = imap.search(None, 'UNSEEN')
|
|
||||||
imap.close()
|
|
||||||
imap.logout()
|
|
||||||
|
|
||||||
return len(resp[0].split())
|
|
||||||
|
|
||||||
|
|
||||||
def ding():
|
|
||||||
Popen(["{}/bin/ding".format(os.getenv("DOTFILES", os.expanduser("~/.dotfiles")))])
|
|
||||||
|
|
||||||
#
|
|
||||||
def main():
|
|
||||||
try:
|
|
||||||
if not internet_is_on():
|
|
||||||
raise IOError("Internet is off")
|
|
||||||
|
|
||||||
secrets = Path(CONFIG_FILE)
|
|
||||||
if not secrets.exists():
|
|
||||||
raise IOError("Can't find secrets")
|
|
||||||
|
|
||||||
gpg = gnupg.GPG()
|
|
||||||
gpgdata = gpg.decrypt(secrets.read_bytes())
|
|
||||||
if not gpgdata.ok:
|
|
||||||
raise IOError("Couldn't decrypt secrets: {}".format(gpgdata.status))
|
|
||||||
accounts = [line.split(':') for line in gpgdata.data.decode('utf-8').strip().split('\n')]
|
|
||||||
|
|
||||||
last_total = 0
|
|
||||||
cache = Path(CACHE_FILE)
|
|
||||||
if cache.exists():
|
|
||||||
cache_text = cache.read_text()
|
|
||||||
last_total = int(cache.read_text())
|
|
||||||
|
|
||||||
total = 0
|
|
||||||
for addr, pwd in accounts:
|
|
||||||
total += unread_count(addr, pwd)
|
|
||||||
|
|
||||||
if total != last_total:
|
|
||||||
ding()
|
|
||||||
if total != 0:
|
|
||||||
print("%{{F{}}}{}{}".format("#f0c674", ICON, total))
|
|
||||||
else:
|
|
||||||
print("%{{F{}}}{}".format("#555856", ICON))
|
|
||||||
|
|
||||||
cache.write_text(str(total))
|
|
||||||
except IOError as e:
|
|
||||||
print("ERROR: {}".format(e), file=sys.stderr)
|
|
||||||
print("%{{F{}}}{}!".format("#cc6666", ICON))
|
|
||||||
sys.exit(1)
|
|
||||||
|
|
||||||
|
|
||||||
#
|
|
||||||
if __name__ == '__main__':
|
|
||||||
if sys.argv[1:]:
|
|
||||||
print("%{{F{}}}{}".format("#555856", ICON))
|
|
||||||
else:
|
|
||||||
main()
|
|
|
@ -1,7 +0,0 @@
|
||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
killall -q polybar
|
|
||||||
while pgrep -u $UID -x polybar >/dev/null; do sleep 1; done
|
|
||||||
|
|
||||||
polybar main >>$XDG_DATA_HOME/polybar.log 2>&1 &
|
|
||||||
echo 'Polybar launched...'
|
|
Binary file not shown.
Before Width: | Height: | Size: 147 KiB |
Loading…
Reference in a new issue