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
|
||||
|
||||
if [[ $OSTYPE == darwin* ]]; then
|
||||
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
|
||||
|
||||
alias e='emacsclient -n'
|
||||
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
|
||||
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}
|
||||
~/.config/bspwm/bin/bspc-swap {_,-m }{west,south,north,east}
|
||||
bspc-swap {_,-m }{west,south,north,east}
|
||||
|
||||
super + {_,shift +}{1-9,0}
|
||||
bspc {desktop -f,node -d} {1-9,10}
|
||||
|
@ -30,13 +30,13 @@ super + shift + grave
|
|||
emacsclient -e '(open-scratch-frame)'
|
||||
|
||||
super + space
|
||||
~/.config/rofi/bin/rofi-appmenu
|
||||
rofi-appmenu
|
||||
|
||||
super + Tab
|
||||
~/.config/rofi/bin/rofi-windowmenu
|
||||
rofi-windowmenu
|
||||
|
||||
super + backslash
|
||||
~/.config/rofi/bin/rofi-passmenu
|
||||
rofi-passmenu
|
||||
|
||||
super + Escape
|
||||
pkill -USR1 -x sxhkd
|
||||
|
@ -56,11 +56,14 @@ super + {_,ctrl + }f
|
|||
#
|
||||
## Media keys
|
||||
|
||||
Print # screenshot region
|
||||
# screenshot region
|
||||
Print
|
||||
scrcap
|
||||
super + Print # screencast region to mp4
|
||||
# screencast region to mp4
|
||||
super + Print
|
||||
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
|
||||
|
||||
XF86MonBrightnessUp
|
||||
|
|
|
@ -1,13 +1,8 @@
|
|||
export ZGEN_DIR="$XDG_CACHE_HOME/zgen"
|
||||
export ZGEN_SOURCE="$ZGEN_DIR/zgen.zsh"
|
||||
|
||||
for dir in $XDG_CONFIG_HOME/*/bin(N); do
|
||||
export PATH="$dir:$PATH"
|
||||
done
|
||||
|
||||
for file in $XDG_CONFIG_HOME/zsh/rc.d/env.*.zsh(N); do
|
||||
source $file
|
||||
done
|
||||
## TODO
|
||||
source $ZDOTDIR/extra.zshenv
|
||||
|
||||
# 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"
|
||||
fi
|
||||
source $ZGEN_SOURCE
|
||||
|
||||
if ! zgen saved; then
|
||||
|
@ -12,7 +11,7 @@ if ! zgen saved; then
|
|||
zgen load zsh-users/zsh-completions src
|
||||
zgen load junegunn/fzf shell
|
||||
|
||||
if [[ -z $SSH_CONNECTION ]]; then
|
||||
if [ -z "$SSH_CONNECTION" ]; then
|
||||
zgen load zdharma/fast-syntax-highlighting
|
||||
fi
|
||||
|
||||
|
@ -25,9 +24,6 @@ if [[ $TERM != dumb ]]; then
|
|||
source $ZDOTDIR/keybinds.zsh
|
||||
source $ZDOTDIR/completion.zsh
|
||||
source $ZDOTDIR/aliases.zsh
|
||||
for file in $XDG_CONFIG_HOME/zsh/rc.d/aliases.*.zsh(N); do
|
||||
source $file
|
||||
done
|
||||
|
||||
##
|
||||
function _cache {
|
||||
|
@ -49,16 +45,15 @@ if [[ $TERM != dumb ]]; then
|
|||
export FZF_CTRL_T_COMMAND="$FZF_DEFAULT_COMMAND"
|
||||
export FZF_ALT_C_COMMAND="fd -t d . $HOME"
|
||||
fi
|
||||
|
||||
_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
|
||||
autopair-init
|
||||
|
||||
|
||||
# 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
|
||||
|
|
|
@ -13,13 +13,6 @@ alias mv='mv -i'
|
|||
|
||||
alias mkdir='mkdir -p'
|
||||
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
|
||||
alias exa='exa --group-directories-first'
|
||||
alias l='exa -1'
|
||||
|
|
|
@ -1,8 +1,6 @@
|
|||
# Stop TRAMP (in Emacs) from hanging or term/shell from echoing back commands
|
||||
if [[ $TERM == dumb || -n $INSIDE_EMACS ]]; then
|
||||
unsetopt zle
|
||||
unsetopt prompt_cr
|
||||
unsetopt prompt_subst
|
||||
unsetopt zle prompt_cr prompt_subst
|
||||
whence -w precmd >/dev/null && unfunction precmd
|
||||
whence -w preexec >/dev/null && unfunction preexec
|
||||
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 = [
|
||||
<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 = {
|
||||
nixPath = options.nix.nixPath.default ++ [
|
||||
"config=/etc/dotfiles/config"
|
||||
"packages=/etc/dotfiles/packages"
|
||||
"my=/etc/dotfiles"
|
||||
];
|
||||
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: {
|
||||
unstable = import <nixpkgs-unstable> {
|
||||
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
|
||||
# compatible, in order to avoid breaking some software such as database
|
||||
# servers. You should change this only after NixOS release notes say you
|
||||
|
|
|
@ -2,18 +2,18 @@
|
|||
# access to my work files from anywhere.
|
||||
|
||||
{ config, ... }:
|
||||
|
||||
{
|
||||
imports = [
|
||||
./. # import common settings
|
||||
|
||||
./modules/services/ssh.nix
|
||||
./modules/services/plex.nix
|
||||
./modules/shell/zsh.nix
|
||||
<my/modules/services/ssh.nix>
|
||||
# ./modules/services/plex.nix
|
||||
<my/modules/services/jellyfin.nix>
|
||||
<my/modules/shell/zsh.nix>
|
||||
];
|
||||
|
||||
time.timeZone = "America/Toronto";
|
||||
|
||||
networking.hostName = "aka";
|
||||
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,10 +1,8 @@
|
|||
{ config, lib, pkgs, ... }:
|
||||
|
||||
{
|
||||
environment = {
|
||||
systemPackages = with pkgs; [
|
||||
firefox-bin
|
||||
(pkgs.writeScriptBin "firefox-private" ''
|
||||
my.packages = with pkgs; [
|
||||
firefox-bin (pkgs.writeScriptBin "firefox-private" ''
|
||||
#! ${pkgs.bash}/bin/bash
|
||||
firefox --private-window "$@"
|
||||
'')
|
||||
|
@ -17,9 +15,7 @@
|
|||
categories = "Network";
|
||||
})
|
||||
];
|
||||
variables = {
|
||||
BROWSER = "firefox";
|
||||
XDG_DESKTOP_DIR = "$HOME"; # prevent firefox creating ~/Desktop
|
||||
};
|
||||
};
|
||||
|
||||
my.env.BROWSER = "firefox";
|
||||
my.env.XDG_DESKTOP_DIR = "$HOME"; # prevent firefox creating ~/Desktop
|
||||
}
|
||||
|
|
|
@ -1,19 +1,14 @@
|
|||
{ config, lib, pkgs, ... }:
|
||||
{
|
||||
environment = {
|
||||
systemPackages = with pkgs; [
|
||||
qutebrowser
|
||||
];
|
||||
variables.BROWSER = "qutebrowser";
|
||||
};
|
||||
|
||||
home.xdg = {
|
||||
my.packages = [ pkgs.qutebrowser ];
|
||||
my.env.BROWSER = "qutebrowser";
|
||||
my.home.xdg = {
|
||||
configFile."qutebrowser" = {
|
||||
source = <config/qutebrowser>;
|
||||
source = <my/config/qutebrowser>;
|
||||
recursive = true;
|
||||
};
|
||||
dataFile."qutebrowser/greasemonkey" = {
|
||||
source = <config/qutebrowser/greasemonkey>;
|
||||
source = <my/config/qutebrowser/greasemonkey>;
|
||||
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, ... }:
|
||||
{
|
||||
environment.systemPackages = with pkgs; [
|
||||
my.packages = with pkgs; [
|
||||
audacity # for recording and remastering audio
|
||||
# lmms # for making music
|
||||
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
|
||||
# not find the Qt platform plugin "xcb" in ""' error on startup:
|
||||
# https://github.com/NixOS/nixpkgs/issues/76074
|
||||
(callPackage <packages/lmms.nix> {})
|
||||
(callPackage <my/packages/lmms.nix> {})
|
||||
];
|
||||
}
|
||||
|
|
|
@ -12,8 +12,7 @@
|
|||
./thunar.nix
|
||||
];
|
||||
|
||||
environment = {
|
||||
systemPackages = with pkgs; [
|
||||
environment.systemPackages = with pkgs; [
|
||||
lightdm
|
||||
bspwm
|
||||
dunst
|
||||
|
@ -69,11 +68,6 @@
|
|||
categories = "Development";
|
||||
})
|
||||
];
|
||||
};
|
||||
|
||||
fonts.fonts = [ pkgs.siji ];
|
||||
|
||||
programs.zsh.interactiveShellInit = "export TERM=xterm-256color";
|
||||
|
||||
services = {
|
||||
xserver = {
|
||||
|
@ -83,7 +77,7 @@
|
|||
enable = true;
|
||||
greeters.mini = {
|
||||
enable = true;
|
||||
user = "hlissner";
|
||||
user = config.my.username;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
@ -92,13 +86,34 @@
|
|||
enable = true;
|
||||
backend = "glx";
|
||||
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"
|
||||
];
|
||||
};
|
||||
};
|
||||
|
||||
# For polybar
|
||||
fonts.fonts = [ pkgs.siji ];
|
||||
|
||||
my = {
|
||||
env.PATH = [ <my/config/bspwm/bin> ];
|
||||
home.xdg.configFile = {
|
||||
"sxhkd".source = <config/sxhkd>;
|
||||
|
||||
"sxhkd".source = <my/config/sxhkd>;
|
||||
# link recursively so other modules can link files in their folders
|
||||
"bspwm" = { source = <config/bspwm>; recursive = true; };
|
||||
"bspwm" = { source = <my/config/bspwm>; recursive = true; };
|
||||
};
|
||||
};
|
||||
}
|
||||
|
|
|
@ -1,15 +1,12 @@
|
|||
{ config, lib, pkgs, ... }:
|
||||
|
||||
{
|
||||
environment.systemPackages = with pkgs; [
|
||||
redshift
|
||||
my.packages = with pkgs; [
|
||||
libqalculate
|
||||
xclip
|
||||
xdotool
|
||||
ffmpeg
|
||||
mpv # video player
|
||||
feh # image viewer
|
||||
maim
|
||||
slop
|
||||
|
||||
# Useful apps
|
||||
evince # pdf reader
|
||||
|
@ -23,6 +20,15 @@
|
|||
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 = {
|
||||
enableFontDir = true;
|
||||
enableGhostscriptFonts = true;
|
||||
|
|
|
@ -1,32 +1,38 @@
|
|||
{ config, lib, pkgs, ... }:
|
||||
|
||||
{
|
||||
environment = {
|
||||
systemPackages = with pkgs; [
|
||||
my = {
|
||||
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" ''
|
||||
#!${stdenv.shell}
|
||||
exec ${rofi}/bin/rofi -terminal xst -m -1 "$@"
|
||||
'')
|
||||
rofi
|
||||
|
||||
# Fake rofi dmenu entries
|
||||
(makeDesktopItem {
|
||||
name = "rofi-browsermenu";
|
||||
desktopName = "Open Bookmark in Firefox";
|
||||
icon = "bookmark-new-symbolic";
|
||||
exec = "${<config/rofi>}/bin/rofi-browsermenu";
|
||||
exec = "${<my/config/rofi>}/bin/rofi-browsermenu";
|
||||
})
|
||||
(makeDesktopItem {
|
||||
name = "rofi-filemenu";
|
||||
desktopName = "Open Directory in Terminal";
|
||||
icon = "folder";
|
||||
exec = "${<config/rofi>}/bin/rofi-filemenu";
|
||||
exec = "${<my/config/rofi>}/bin/rofi-filemenu";
|
||||
})
|
||||
(makeDesktopItem {
|
||||
name = "rofi-filemenu-scratch";
|
||||
desktopName = "Open Directory in Scratch Terminal";
|
||||
icon = "folder";
|
||||
exec = "${<config/rofi>}/bin/rofi-filemenu -x";
|
||||
exec = "${<my/config/rofi>}/bin/rofi-filemenu -x";
|
||||
})
|
||||
|
||||
(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, ... }:
|
||||
|
||||
{
|
||||
environment.systemPackages = with pkgs; [
|
||||
my.packages = with pkgs; [
|
||||
xfce.thunar
|
||||
xfce.tumbler # for thumbnails
|
||||
];
|
||||
|
|
|
@ -3,9 +3,10 @@
|
|||
{
|
||||
imports = [ ./. ];
|
||||
|
||||
environment.systemPackages = with pkgs; [
|
||||
my.packages = with pkgs; [
|
||||
clang
|
||||
gcc
|
||||
cmake
|
||||
llvmPackages.libcxx
|
||||
];
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
{ config, lib, pkgs, ... }:
|
||||
|
||||
{
|
||||
environment.systemPackages = with pkgs; [
|
||||
my.packages = with pkgs; [
|
||||
gnumake
|
||||
];
|
||||
}
|
||||
|
|
|
@ -1,12 +1,10 @@
|
|||
{ config, lib, pkgs, ... }:
|
||||
|
||||
{
|
||||
environment.systemPackages = with pkgs; [
|
||||
rustup
|
||||
];
|
||||
|
||||
home.xdg.configFile = {
|
||||
"zsh/rc.d/aliases.rust.zsh".source = <config/rust/aliases.zsh>;
|
||||
"zsh/rc.d/env.rust.zsh".source = <config/rust/env.zsh>;
|
||||
my = {
|
||||
packages = with pkgs; [ rustup ];
|
||||
env.CARGO_HOME = "$XDG_DATA_HOME/cargo";
|
||||
env.RUSTUP_HOME = "$XDG_DATA_HOME/rustup";
|
||||
env.PATH = [ "$CARGO_HOME/bin" ];
|
||||
};
|
||||
}
|
||||
|
|
|
@ -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, ... }:
|
||||
|
||||
{
|
||||
|
|
|
@ -1,10 +1,11 @@
|
|||
# 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.
|
||||
|
||||
{ config, lib, pkgs, ... }:
|
||||
{
|
||||
environment.systemPackages = with pkgs; [
|
||||
my = {
|
||||
packages = with pkgs; [
|
||||
# Doom dependencies
|
||||
emacs
|
||||
git
|
||||
|
@ -23,15 +24,14 @@
|
|||
texlive.combined.scheme-medium # :lang org -- for latex previews
|
||||
ccls # :lang (cc +lsp)
|
||||
nodePackages.javascript-typescript-langserver # :lang (javascript +lsp)
|
||||
rls # :lang (rust +lsp)
|
||||
rls
|
||||
];
|
||||
|
||||
env.PATH = [ "$HOME/.emacs.d/bin" ];
|
||||
zsh.rc = lib.readFile <my/config/emacs/aliases.zsh>;
|
||||
};
|
||||
|
||||
fonts.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, ... }:
|
||||
|
||||
{
|
||||
environment = {
|
||||
sessionVariables = {
|
||||
EDITOR = "nvim";
|
||||
VIMINIT = "let \\$MYVIMRC='\\$XDG_CONFIG_HOME/nvim/init.vim' | source \\$MYVIMRC";
|
||||
};
|
||||
|
||||
systemPackages = with pkgs; [
|
||||
my = {
|
||||
packages = with pkgs; [
|
||||
editorconfig-core-c
|
||||
neovim
|
||||
];
|
||||
env.EDITOR = "nvim";
|
||||
env.VIMINIT = "let \\$MYVIMRC='\\$XDG_CONFIG_HOME/nvim/init.vim' | source \\$MYVIMRC";
|
||||
};
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
{ config, lib, pkgs, ... }:
|
||||
|
||||
{
|
||||
environment.systemPackages = with pkgs; [
|
||||
my.packages = with pkgs; [
|
||||
steam
|
||||
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, ... }:
|
||||
{
|
||||
environment.systemPackages = with pkgs; [
|
||||
slop # for selecting arbitrary regions on screen
|
||||
ffmpeg # for recording gifs/mp4s quickly
|
||||
my.packages = with pkgs; [
|
||||
audacity # for recording and remastering audio
|
||||
obs-studio # for streaming to twitch/recording for youtube
|
||||
handbrake # for encoding footage
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
services.syncthing = {
|
||||
enable = true;
|
||||
openDefaultPorts = true;
|
||||
user = "hlissner";
|
||||
user = config.my.username;
|
||||
configDir = "/home/hlissner/.config/syncthing";
|
||||
dataDir = "/home/hlissner/sync";
|
||||
};
|
||||
|
|
|
@ -1,8 +1,10 @@
|
|||
{ config, lib, pkgs, ... }:
|
||||
|
||||
{
|
||||
environment.systemPackages = with pkgs; [
|
||||
direnv
|
||||
(import <nixpkgs-unstable> {}).lorri
|
||||
];
|
||||
services.lorri.enable = true;
|
||||
|
||||
my = {
|
||||
packages = [ pkgs.direnv ];
|
||||
zsh.rc = "_cache direnv hook zsh";
|
||||
};
|
||||
}
|
||||
|
|
|
@ -1,14 +1,16 @@
|
|||
{ config, lib, pkgs, ... }:
|
||||
|
||||
{
|
||||
environment.systemPackages = with pkgs; [
|
||||
my = {
|
||||
packages = with pkgs; [
|
||||
gitAndTools.hub
|
||||
gitAndTools.diff-so-fancy
|
||||
];
|
||||
|
||||
zsh.rc = lib.readFile <my/config/git/aliases.zsh>;
|
||||
# Do recursively, in case git stores files in this folder
|
||||
home.xdg.configFile = {
|
||||
"git/config".source = <config/git/config>;
|
||||
"git/ignore".source = <config/git/ignore>;
|
||||
"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, ... }:
|
||||
|
||||
{
|
||||
environment = {
|
||||
extraInit = ''
|
||||
export GNUPGHOME="$XDG_CONFIG_HOME/gnupg"
|
||||
mkdir -p "$GNUPGHOME" -m 700
|
||||
'';
|
||||
|
||||
systemPackages = with pkgs; [
|
||||
my = {
|
||||
packages = with pkgs; [
|
||||
gnupg
|
||||
pinentry
|
||||
];
|
||||
env.GNUPGHOME = "$XDG_CONFIG_HOME/gnupg";
|
||||
init = "mkdir -p \"$GNUPGHOME\" -m 700";
|
||||
};
|
||||
|
||||
programs.gnupg.agent = {
|
||||
|
@ -23,7 +20,7 @@
|
|||
${pkgs.gnupg}/bin/gpg-agent \
|
||||
--supervised \
|
||||
--allow-emacs-pinentry \
|
||||
--default-cache-ttl 1200 \
|
||||
--default-cache-ttl 1800 \
|
||||
--pinentry-program ${pkgs.pinentry}/bin/pinentry-gtk-2
|
||||
''
|
||||
];
|
||||
|
|
|
@ -1,14 +1,19 @@
|
|||
{ config, lib, pkgs, ... }:
|
||||
|
||||
{
|
||||
environment.systemPackages = with pkgs; [
|
||||
my.packages = with pkgs; [
|
||||
(ncmpcpp.override { visualizerSupport = true; })
|
||||
];
|
||||
|
||||
home.xdg.configFile = {
|
||||
"zsh/rc.d/aliases.ncmpcpp.zsh".source = <config/ncmpcpp/aliases.zsh>;
|
||||
"zsh/rc.d/env.ncmpcpp.zsh".source = <config/ncmpcpp/env.zsh>;
|
||||
"ncmpcpp/config".source = <config/ncmpcpp/config>;
|
||||
"ncmpcpp/bindings".source = <config/ncmpcpp/bindings>;
|
||||
my.env.MPD_HOME = "$XDG_CONFIG_HOME/mpd";
|
||||
my.env.NCMPCPP_HOME = "$XDG_CONFIG_HOME/ncmpcpp";
|
||||
|
||||
my.alias.rate = "mpd-rate";
|
||||
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, ... }:
|
||||
|
||||
{
|
||||
environment = {
|
||||
systemPackages = with pkgs; [
|
||||
my = {
|
||||
packages = with pkgs; [
|
||||
(pass.withExtensions (exts: [
|
||||
exts.pass-otp
|
||||
exts.pass-genphrase
|
||||
]))
|
||||
];
|
||||
|
||||
variables.PASSWORD_STORE_DIR = "$HOME/.secrets/password-store";
|
||||
env.PASSWORD_STORE_DIR = "$HOME/.secrets/password-store";
|
||||
};
|
||||
}
|
||||
|
|
|
@ -1,24 +1,23 @@
|
|||
{ config, pkgs, libs, ... }:
|
||||
|
||||
{
|
||||
environment = {
|
||||
systemPackages = with pkgs; [
|
||||
my = {
|
||||
packages = with pkgs; [
|
||||
zsh
|
||||
nix-zsh-completions
|
||||
fasd
|
||||
bat
|
||||
exa
|
||||
fasd
|
||||
fd
|
||||
fzf
|
||||
tmux
|
||||
htop
|
||||
tree
|
||||
tldr
|
||||
tree
|
||||
];
|
||||
variables = {
|
||||
ZDOTDIR = "$XDG_CONFIG_HOME/zsh";
|
||||
ZSH_CACHE = "$XDG_CACHE_HOME/zsh";
|
||||
};
|
||||
env.ZDOTDIR = "$XDG_CONFIG_HOME/zsh";
|
||||
env.ZSH_CACHE = "$XDG_CACHE_HOME/zsh";
|
||||
|
||||
home.xdg.configFile."zsh" = { source = <my/config/zsh>; recursive = true; };
|
||||
};
|
||||
|
||||
programs.zsh = {
|
||||
|
@ -27,13 +26,4 @@
|
|||
enableGlobalCompInit = false; # I'll do it myself
|
||||
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, ... }:
|
||||
|
||||
{
|
||||
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}" ];
|
||||
QT_QPA_PLATFORMTHEME = "gtk2";
|
||||
};
|
||||
|
||||
qt5 = {
|
||||
style = "gtk2";
|
||||
platformTheme = "gtk2";
|
||||
};
|
||||
|
||||
services.xserver.displayManager.sessionCommands = ''
|
||||
export GTK2_RC_FILES="$XDG_CONFIG_HOME/gtk-2.0/gtkrc"
|
||||
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 = {
|
||||
enable = 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