Compare commits

..

No commits in common. "master" and "statusbar-messaging" have entirely different histories.

377 changed files with 36099 additions and 4607 deletions

64
.config/bash/bashrc Normal file
View File

@ -0,0 +1,64 @@
#!/bin/bash
# some housekeeping
shopt -s autocd
set -o vi # vim mode
alias ls="ls --color=auto"
alias ll="ls -lah --color=auto"
function cd() {
builtin cd "$@" && ls --color=auto
}
# history
HISTCONTROL=ignorespace:ignoredups:erasedups
HISTFILESIZE=9999999999
HISTSIZE=9999999999
shopt -s cmdhist
shopt -s histreedit
shopt -s histappend
shopt -s histverify
PS1="\h:\w\$ "
repos() {
sel="$(ls ~/git | fzy | awk '{print "/home/usr/git/"$1}')"
[ "$?" -eq 1 ] && exit
cd "$sel"
}
hist() {
res=$(cat ~/.config/bash/hist | \
sort | \
uniq | \
shuf | \
fzy)
[ -n "$res" ] && $($res)
}
search() {
if [ "$1" = '-a' ]; then
res=$(find /home/usr/ /home/usr/doc/ \
-mindepth 1 \
-not -path '*/.*' \
-not -path './Mail/*' \
-not -path './vdir/*' \
-not -path '*venv*' \
-not -path '*node_modules*' \
-not -path '*__pycache__*' \
-type d | cut -c 11- | fzy)
else
res=$(find $(pwd) \
-mindepth 1 \
-not -path '*/.*' \
-not -path './Mail/*' \
-not -path './vdir/*' \
-not -path '*venv*' \
-not -path '*node_modules*' \
-not -path '*__pycache__*' \
-type d | cut -c 11- | fzy)
fi
[ -n "$res" ] && cd /home/usr/"$res"
}

View File

@ -2,10 +2,6 @@
# paths and stuff # paths and stuff
export PATH="$PATH:$HOME/.local/bin" export PATH="$PATH:$HOME/.local/bin"
if [ $(hostname) = "localhost" ]; then # this is phone
export PATH="$PATH:$HOME/dot_testing/boxes/phone/out-of-tree/git-annex.linux"
fi
export MANPATH="$(manpath -q):$HOME/.local/share/man" export MANPATH="$(manpath -q):$HOME/.local/share/man"
export EDITOR="nvim" export EDITOR="nvim"
mkdir -p "$HOME/.local/bin" "$HOME/.share/man" mkdir -p "$HOME/.local/bin" "$HOME/.share/man"
@ -55,9 +51,6 @@ export ELINKS_CONFDIR="$HOME/.config/elinks"
# dbus configuration # dbus configuration
export DBUS_SESSION_BUS_ADDRESS="unix:path=$XDG_RUNTIME_DIR/bus" export DBUS_SESSION_BUS_ADDRESS="unix:path=$XDG_RUNTIME_DIR/bus"
# make nix-shell respect our PS1
export NIX_SHELL_PRESERVE_PROMPT=1
# source the bashrc(s) # source the bashrc(s)
[ -f $HOME/.config/bash/bashrc ] && . $HOME/.config/bash/bashrc [ -f $HOME/.config/bash/bashrc ] && . $HOME/.config/bash/bashrc
[ -f $HOME/.bashrc ] && . $HOME/.bashrc [ -f $HOME/.bashrc ] && . $HOME/.bashrc

View File

@ -8,7 +8,7 @@ bspc rule -a Xmessage border=on state=floating
bspc rule -a Zathura state=tiled bspc rule -a Zathura state=tiled
bspc rule -a generic-st-window state=floating manage=on sticky=on border=on bspc rule -a generic-st-window state=floating manage=on sticky=on border=on
bspc rule -a floating-feh state=floating bspc rule -a floating-feh state=floating
bspc rule -a send-to-9 desktop=09 bspc rule -a send-to-9 desktop=9
bspc rule -a steam desktop=1 bspc rule -a steam desktop=1
bspc rule -a discord desktop=2 bspc rule -a discord desktop=2
@ -26,5 +26,3 @@ bspc config top_padding 20
# post-wm configuration # post-wm configuration
disp disp
bspc desktop -f 01

524
.config/elinks/elinks.conf Normal file
View File

@ -0,0 +1,524 @@
## ELinks 0.16.1.1 configuration file
## This is ELinks configuration file. You can edit it manually,
## if you wish so; this file is edited by ELinks when you save
## options through UI, however only option values will be altered
## and missing options will be added at the end of file; if option
## is not written in this file, but in some file included from it,
## it is NOT counted as missing. Note that all your formatting,
## own comments and so on will be kept as-is.
##
## Obviously, if you don't like what ELinks is going to do with
## this file, you can change it by altering the config.saving_style
## option. Come on, aren't we friendly guys after all?
##############################
# Automatically saved options
#
## config
# Configuration handling options.
## config.saving_style_w [0|1]
# This is internal option used when displaying a warning about obsolete
# config.saving_style. You shouldn't touch it.
set config.saving_style_w = 1
## terminal
# Terminal options.
## terminal.st-256color
# Options specific to this terminal type (according to $TERM value).
## terminal.st-256color.transparency [0|1]
set terminal.st-256color.transparency = 1
## ui
# User interface options.
## ui.language <language>
# Language of user interface. 'System' means that the language will be
# extracted from the environment dynamically.
set ui.language = "System"
##############################
# Automatically saved options
#
## terminal
# Terminal options.
## terminal.st-256color
# Options specific to this terminal type (according to $TERM value).
## terminal.st-256color.colors <num>
set terminal.st-256color.colors = 1
##############################
# Automatically saved options
#
## cookies
# Cookies options.
## cookies.accept_policy <num>
# Cookies accepting policy:
# 0 is accept no cookies
# 1 is ask for confirmation before accepting cookie
# 2 is accept all cookies
set cookies.accept_policy = 0
## ui
# User interface options.
## ui.colors
# Default user interface color settings.
## ui.colors.color
# Color settings for color terminal.
## ui.colors.color.mainmenu
# Main menu bar colors.
## ui.colors.color.mainmenu.normal
# Unselected main menu bar item colors.
## ui.colors.color.mainmenu.normal.text <color|#rrggbb>
# Default text color.
set ui.colors.color.mainmenu.normal.text = "white"
## ui.colors.color.mainmenu.normal.background <color|#rrggbb>
# Default background color.
set ui.colors.color.mainmenu.normal.background = "black"
## ui.colors.color.mainmenu.selected
# Selected main menu bar item colors.
## ui.colors.color.mainmenu.selected.text <color|#rrggbb>
# Default text color.
set ui.colors.color.mainmenu.selected.text = "black"
## ui.colors.color.mainmenu.selected.background <color|#rrggbb>
# Default background color.
set ui.colors.color.mainmenu.selected.background = "white"
## ui.colors.color.mainmenu.hotkey
# Main menu hotkey colors.
## ui.colors.color.mainmenu.hotkey.normal
# Main menu unselected hotkey colors.
## ui.colors.color.mainmenu.hotkey.normal.text <color|#rrggbb>
# Default text color.
set ui.colors.color.mainmenu.hotkey.normal.text = "black"
## ui.colors.color.mainmenu.hotkey.normal.background <color|#rrggbb>
# Default background color.
set ui.colors.color.mainmenu.hotkey.normal.background = "white"
## ui.colors.color.mainmenu.hotkey.selected
# Main menu selected hotkey colors.
## ui.colors.color.mainmenu.hotkey.selected.text <color|#rrggbb>
# Default text color.
set ui.colors.color.mainmenu.hotkey.selected.text = "white"
## ui.colors.color.mainmenu.hotkey.selected.background <color|#rrggbb>
# Default background color.
set ui.colors.color.mainmenu.hotkey.selected.background = "black"
## ui.colors.color.menu
# Menu bar colors.
## ui.colors.color.menu.normal
# Unselected menu item colors.
## ui.colors.color.menu.normal.text <color|#rrggbb>
# Default text color.
set ui.colors.color.menu.normal.text = "white"
## ui.colors.color.menu.normal.background <color|#rrggbb>
# Default background color.
set ui.colors.color.menu.normal.background = "black"
## ui.colors.color.menu.selected
# Selected menu item colors.
## ui.colors.color.menu.selected.text <color|#rrggbb>
# Default text color.
set ui.colors.color.menu.selected.text = "black"
## ui.colors.color.menu.selected.background <color|#rrggbb>
# Default background color.
set ui.colors.color.menu.selected.background = "white"
## ui.colors.color.menu.marked
# Marked menu item colors.
## ui.colors.color.menu.marked.text <color|#rrggbb>
# Default text color.
set ui.colors.color.menu.marked.text = "red"
## ui.colors.color.menu.marked.background <color|#rrggbb>
# Default background color.
set ui.colors.color.menu.marked.background = "black"
## ui.colors.color.menu.hotkey
# Menu item hotkey colors.
## ui.colors.color.menu.hotkey.normal
# Menu item unselected hotkey colors.
## ui.colors.color.menu.hotkey.normal.text <color|#rrggbb>
# Default text color.
set ui.colors.color.menu.hotkey.normal.text = "black"
## ui.colors.color.menu.hotkey.normal.background <color|#rrggbb>
# Default background color.
set ui.colors.color.menu.hotkey.normal.background = "white"
## ui.colors.color.menu.hotkey.selected
# Menu item selected hotkey colors.
## ui.colors.color.menu.hotkey.selected.text <color|#rrggbb>
# Default text color.
set ui.colors.color.menu.hotkey.selected.text = "white"
## ui.colors.color.menu.hotkey.selected.background <color|#rrggbb>
# Default background color.
set ui.colors.color.menu.hotkey.selected.background = "black"
## ui.colors.color.menu.frame
# Menu frame colors.
## ui.colors.color.menu.frame.text <color|#rrggbb>
# Default text color.
set ui.colors.color.menu.frame.text = "white"
## ui.colors.color.menu.frame.background <color|#rrggbb>
# Default background color.
set ui.colors.color.menu.frame.background = "black"
## ui.colors.color.dialog
# Dialog colors.
## ui.colors.color.dialog.generic
# Generic dialog colors.
## ui.colors.color.dialog.generic.text <color|#rrggbb>
# Default text color.
set ui.colors.color.dialog.generic.text = "white"
## ui.colors.color.dialog.generic.background <color|#rrggbb>
# Default background color.
set ui.colors.color.dialog.generic.background = "black"
## ui.colors.color.dialog.frame
# Dialog frame colors.
## ui.colors.color.dialog.frame.text <color|#rrggbb>
# Default text color.
set ui.colors.color.dialog.frame.text = "white"
## ui.colors.color.dialog.frame.background <color|#rrggbb>
# Default background color.
set ui.colors.color.dialog.frame.background = "black"
## ui.colors.color.dialog.title
# Dialog title colors.
## ui.colors.color.dialog.title.text <color|#rrggbb>
# Default text color.
set ui.colors.color.dialog.title.text = "white"
## ui.colors.color.dialog.title.background <color|#rrggbb>
# Default background color.
set ui.colors.color.dialog.title.background = "black"
## ui.colors.color.dialog.text
# Dialog text colors.
## ui.colors.color.dialog.text.text <color|#rrggbb>
# Default text color.
set ui.colors.color.dialog.text.text = "white"
## ui.colors.color.dialog.text.background <color|#rrggbb>
# Default background color.
set ui.colors.color.dialog.text.background = "black"
## ui.colors.color.dialog.checkbox
# Dialog checkbox colors.
## ui.colors.color.dialog.checkbox.text <color|#rrggbb>
# Default text color.
set ui.colors.color.dialog.checkbox.text = "darkred"
## ui.colors.color.dialog.checkbox.background <color|#rrggbb>
# Default background color.
set ui.colors.color.dialog.checkbox.background = "black"
## ui.colors.color.dialog.checkbox-selected
# Dialog selected checkbox colors.
## ui.colors.color.dialog.checkbox-selected.text <color|#rrggbb>
# Default text color.
set ui.colors.color.dialog.checkbox-selected.text = "yellow"
## ui.colors.color.title
# Title bar colors.
## ui.colors.color.title.title-bar
# Generic title bar colors.
## ui.colors.color.title.title-bar.text <color|#rrggbb>
# Default text color.
set ui.colors.color.title.title-bar.text = "white"
## ui.colors.color.title.title-bar.background <color|#rrggbb>
# Default background color.
set ui.colors.color.title.title-bar.background = "black"
## ui.colors.color.title.title-text
# Title bar text colors.
## ui.colors.color.title.title-text.text <color|#rrggbb>
# Default text color.
set ui.colors.color.title.title-text.text = "white"
## ui.colors.color.title.title-text.background <color|#rrggbb>
# Default background color.
set ui.colors.color.title.title-text.background = "black"
## ui.colors.color.status
# Status bar colors.
## ui.colors.color.status.showip-text
# Status bar show ip text colors.
## ui.colors.color.status.showip-text.text <color|#rrggbb>
# Default text color.
set ui.colors.color.status.showip-text.text = "white"
## ui.colors.color.status.showip-text.background <color|#rrggbb>
# Default background color.
set ui.colors.color.status.showip-text.background = "black"
## ui.colors.color.status.status-bar
# Generic status bar colors.
## ui.colors.color.status.status-bar.text <color|#rrggbb>
# Default text color.
set ui.colors.color.status.status-bar.text = "white"
## ui.colors.color.status.status-bar.background <color|#rrggbb>
# Default background color.
set ui.colors.color.status.status-bar.background = "black"
## ui.colors.color.status.status-text
# Status bar text colors.
## ui.colors.color.status.status-text.text <color|#rrggbb>
# Default text color.
set ui.colors.color.status.status-text.text = "white"
## ui.colors.color.status.status-text.background <color|#rrggbb>
# Default background color.
set ui.colors.color.status.status-text.background = "black"
## ui.colors.color.tabs
# Tabs bar colors.
## ui.colors.color.tabs.unvisited
# Tab colors for tabs that have not been selected since they completed
# loading.
## ui.colors.color.tabs.unvisited.text <color|#rrggbb>
# Default text color.
set ui.colors.color.tabs.unvisited.text = "white"
## ui.colors.color.tabs.unvisited.background <color|#rrggbb>
# Default background color.
set ui.colors.color.tabs.unvisited.background = "black"
## ui.colors.color.tabs.normal
# Unselected tab colors.
## ui.colors.color.tabs.normal.text <color|#rrggbb>
# Default text color.
set ui.colors.color.tabs.normal.text = "white"
## ui.colors.color.tabs.normal.background <color|#rrggbb>
# Default background color.
set ui.colors.color.tabs.normal.background = "black"
## ui.colors.color.tabs.loading
# Tab colors for tabs that are loading in the background.
## ui.colors.color.tabs.loading.text <color|#rrggbb>
# Default text color.
set ui.colors.color.tabs.loading.text = "darkred"
## ui.colors.color.tabs.loading.background <color|#rrggbb>
# Default background color.
set ui.colors.color.tabs.loading.background = "black"
## ui.colors.color.tabs.selected
# Selected tab colors.
## ui.colors.color.tabs.selected.text <color|#rrggbb>
# Default text color.
set ui.colors.color.tabs.selected.text = "black"
## ui.colors.color.tabs.selected.background <color|#rrggbb>
# Default background color.
set ui.colors.color.tabs.selected.background = "white"
## ui.colors.color.tabs.separator
# Tab separator colors.
## ui.colors.color.tabs.separator.text <color|#rrggbb>
# Default text color.
set ui.colors.color.tabs.separator.text = "white"
## ui.colors.color.tabs.separator.background <color|#rrggbb>
# Default background color.
set ui.colors.color.tabs.separator.background = "black"
## ui.colors.color.desktop
# Desktop background.
## ui.colors.color.desktop.text <color|#rrggbb>
# Default text color.
set ui.colors.color.desktop.text = "white"
## ui.colors.color.desktop.background <color|#rrggbb>
# Default background color.
set ui.colors.color.desktop.background = "black"
## ui.background_char <num>
# Integer value of background character.
set ui.background_char = 32
## ui.show_ip [0|1]
# Whether to display IP of the document in the status bar.
set ui.show_ip = 1
## ui.show_menu_bar_always [0|1]
# Always show menu bar on the screen.
set ui.show_menu_bar_always = 1
## ui.show_status_bar [0|1]
# Show status bar on the screen.
set ui.show_status_bar = 1
## ui.show_title_bar [0|1]
# Show title bar on the screen.
set ui.show_title_bar = 1
##################################
# Automatically saved keybindings
#
bind "main" "k" = "none"
##############################
# Automatically saved options
#
## document
# Document options.
## document.colors
# Default document color settings.
## document.colors.use_document_colors <num>
# Use colors specified in document:
# 0 is use always the default settings
# 1 is use document colors if available, except background
# 2 is use document colors, including background. This can
# mostly look very impressive, but some sites will appear
# really ugly. Note, that obviously if the background is
# not black, it will break the behaviour of transparency.
set document.colors.use_document_colors = 1
##############################
# Automatically saved options
#
## document
# Document options.
## document.browse
# Document browsing options (mainly interactivity).
## document.browse.forms
# Options for handling of the forms interaction.
## document.browse.forms.confirm_submit [0|1]
# Ask for confirmation when submitting a form.
set document.browse.forms.confirm_submit = 0

168
.config/emacs/init.el Normal file
View File

@ -0,0 +1,168 @@
;; rndusr's init.el
;; configure the package manager
(require 'package)
(add-to-list 'package-archives
'("melpa" . "https://melpa.org/packages/"))
(package-initialize)
;; (package-refresh-contents)
; disable annoying ui features
(menu-bar-mode -1)
(tool-bar-mode -1)
(scroll-bar-mode -1)
(setq auto-save-default nil)
(add-hook 'prog-mode-hook 'display-line-numbers-mode)
(defun keymap-symbol (keymap)
"Return the symbol to which KEYMAP is bound, or nil if no such symbol exists."
(catch 'gotit
(mapatoms (lambda (sym)
(and (boundp sym)
(eq (symbol-value sym) keymap)
(not (eq sym 'keymap))
(throw 'gotit sym))))))
(defun get-local-map () (interactive) (message "Current mapping: %S" (keymap-symbol (current-local-map))))
;; download packages
(unless (package-installed-p 'evil)
(package-install 'evil))
(unless (package-installed-p 'org)
(package-install 'org))
(unless (package-installed-p 'org-drill)
(package-install 'org-drill))
(unless (package-installed-p 'accent)
(package-install 'accent))
(unless (package-installed-p 'elfeed)
(package-install 'elfeed))
(unless (package-installed-p 'hackernews)
(package-install 'hackernews))
(unless (package-installed-p 'emms)
(package-install 'emms))
(unless (package-installed-p 'company)
(package-install 'company))
(unless (package-installed-p 'anaconda-mode)
(package-install 'anaconda-mode))
(unless (package-installed-p 'company-anaconda)
(package-install 'company-anaconda))
(unless (package-installed-p 'calfw)
(package-install 'calfw))
(unless (package-installed-p 'calfw-org)
(package-install 'calfw-org))
(unless (package-installed-p 'calfw-ical)
(package-install 'calfw-ical))
;; activate packages
(require 'evil)
(require 'org)
(require 'calfw)
(require 'calfw-org)
(require 'calfw-ical)
(require 'org-drill)
(require 'accent)
(require 'elfeed)
(require 'hackernews)
(require 'emms)
(require 'company)
(require 'anaconda-mode)
(require 'company-anaconda)
;; configure packages
;; - evil-mode
(evil-set-initial-state 'elfeed-search 'emacs)
;; swap ; and :
(with-eval-after-load 'evil-maps
(define-key evil-motion-state-map (kbd ";") 'evil-ex))
(evil-set-leader 'normal (kbd "<SPC>"))
(defun configreload () (interactive) (load "~/.config/emacs/init.el"))
(defun configread () (interactive) (find-file-noselect "~/dot_testing/config/emacs/init.el"))
(defun nixrebuild () (interactive) (term "rebuild"))
(evil-define-key 'normal 'global (kbd "<leader>rr") 'configreload)
(evil-define-key 'normal 'global (kbd "<leader>re") 'configread)
(evil-define-key 'normal 'global (kbd "<leader>nrr") 'nixrebuild)
(evil-ex-define-cmd "get-current-mapping" 'get-local-map)
(evil-mode 1)
;; company-mode
(add-hook 'after-init-hook 'global-company-mode)
(setq company-idle-delay 1
company-tooltip-idle-delay 10
company-require-match nil
company-frontends
'(company-pseudo-tooltip-unless-just-one-frontend-with-delay
company-preview-frontend
company-echo-metadata-frontend)
company-backends '(company-capf))
(setq company-tooltip-align-annotations t)
(add-to-list 'company-backends 'company-anaconda)
(add-hook 'python-mode-hook 'anaconda-mode)
;; org
(setq org-agenda-files '("~/org"))
(setq calendar-week-start-day 1)
(setq org-todo-keywords '((type "MEETING" "CLASS" "TODO" "REHERSAL" "|" "DONE")))
(setq org-return-follows-link t)
;; calfw
(defun google-calendar (id) (concatenate 'string "https://calendar.google.com/calendar/ical/" id "%40group.calendar.google.com/public/basic.ics"))
(defun my-open-calendar ()
(interactive)
(cfw:open-calendar-buffer
:contents-sources
(list
(cfw:org-create-source "Green")
(cfw:ical-create-source "wcs" (google-calendar "c_037e243v5md54rj8kp1k898oo4") "IndianRed")
(cfw:ical-create-source "band" (google-calendar "i6bong6iferbcuf1u25jg47t7k") "Blue")
(cfw:ical-create-source "schoology" "https://wcschools.schoology.com/calendar/feed/ical/1692031887/ef3eab3f5ac45935472a9fa6f601a63a/ical.ics" "Yellow")
)))
;; emms
(require 'emms-player-simple)
(require 'emms-source-file)
(require 'emms-source-playlist)
(emms-all)
(emms-default-players)
(evil-define-key 'normal 'emms-browser-mode-map (kbd "z") 'emms-browser-expand-one-level)
(evil-define-key 'normal 'emms-browser-mode-map (kbd "RET") 'emms-browser-add-tracks-and-play)
(evil-define-key 'normal 'emms-browser-mode-map (kbd "e") 'emms-browser-add-tracks)
;; - elfeed
(global-set-key (kbd "C-x w") 'elfeed)
(setq elfeed-feeds
'("http://nullprogram.com/feed/"
"https://drewdevault.com/blog/index.xml"
"https://digitallibrary.un.org/rss?ln=en&p=libya&rg=50&c=Resource%20Type&c=UN%20Bodies"
"https://planet.emacslife.com/atom.xml"))
(setq elfeed-db-directory "~/.cache/elfeed")
;; - accent.el
(evil-define-key 'insert 'global (kbd "C-k") 'accent-menu)
;; fonts
(set-face-attribute 'default nil
:font "Fantasque Sans Mono 10"
:foreground "white" :background "gray8")
(custom-set-variables
;; custom-set-variables was added by Custom.
;; If you edit it by hand, you could mess it up, so be careful.
;; Your init file should contain only one such instance.
;; If there is more than one, they won't work right.
'(package-selected-packages
'(company-anaconda anaconda-mode company emms bongo accent org-drill hackernews evil elfeed)))
(custom-set-faces
;; custom-set-faces was added by Custom.
;; If you edit it by hand, you could mess it up, so be careful.
;; Your init file should contain only one such instance.
;; If there is more than one, they won't work right.
)

View File

@ -3,19 +3,10 @@
name = stupidcomputer name = stupidcomputer
[credential "https://git.beepboop.systems"] [credential "https://git.beepboop.systems"]
helper = !git-rbw-wrap gitea username = stupidcomputer
[credential "https://github.com"]
helper = !git-rbw-wrap github-pat
[advice] [advice]
addIgnoredFile = false addIgnoredFile = false
[init] [init]
defaultBranch = main defaultBranch = main
[help]
autocorrect = prompt
[push]
autoSetupRemote = true

View File

@ -17,7 +17,7 @@ set spoolfile = +INBOX
set record = "+Sent" set record = "+Sent"
set trash = "+Trash" set trash = "+Trash"
set postponed = "+Drafts" set postponed = "+Drafts"
mailboxes +SMS +INBOX "+College Messages" +"Internship 24" mailboxes +SMS +INBOX "+College Messages"
unset wait_key unset wait_key
macro index S "<shell-escape>mbsync --config=$HOME/.config/isync/config main; vdirsyncer sync<enter>" macro index S "<shell-escape>mbsync --config=$HOME/.config/isync/config main; vdirsyncer sync<enter>"
@ -26,4 +26,3 @@ set use_threads = yes
set sort_aux = reverse-last-date-received set sort_aux = reverse-last-date-received
set imap_keepalive = 300 set imap_keepalive = 300
set query_command = "khard email --parsable --search-in-source-files '%s'"

View File

@ -72,7 +72,6 @@ opt.inccommand = 'nosplit'
opt.hidden = true opt.hidden = true
opt.linebreak = true opt.linebreak = true
opt.path = '.,/usr/include,**' opt.path = '.,/usr/include,**'
vim.opt.signcolumn = 'yes'
vim.cmd.colorscheme('earth') vim.cmd.colorscheme('earth')
opt.statusline="%f %r%m%q%h%=%y 0x%02B %04l:%03c:%03p" opt.statusline="%f %r%m%q%h%=%y 0x%02B %04l:%03c:%03p"
vim.api.nvim_exec("let &titlestring='%{expand(\"%:p\")}'", true) vim.api.nvim_exec("let &titlestring='%{expand(\"%:p\")}'", true)
@ -93,7 +92,6 @@ function setTabbing(lang, width)
end end
setTabbing("python", 4) setTabbing("python", 4)
setTabbing("htmldjango", 4)
setTabbing("javascript", 4) setTabbing("javascript", 4)
setTabbing("css", 4) setTabbing("css", 4)
setTabbing("html", 4) setTabbing("html", 4)
@ -116,39 +114,41 @@ globals.netrw_liststyle = 3
globals.netrw_browser_split = 4 globals.netrw_browser_split = 4
-- }}} -- }}}
-- lazy.nvim {{{ -- packer.nvim {{{
local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim" -- taken from packer.nvim readme
if not (vim.uv or vim.loop).fs_stat(lazypath) then local ensure_packer = function()
local lazyrepo = "https://github.com/folke/lazy.nvim.git" local fn = vim.fn
local out = vim.fn.system({ "git", "clone", "--filter=blob:none", "--branch=stable", lazyrepo, lazypath }) local install_path = fn.stdpath('data') .. '/site/pack/packer/start/packer.nvim'
if vim.v.shell_error ~= 0 then if fn.empty(fn.glob(install_path)) > 0 then
vim.api.nvim_echo({ fn.system({'git', 'clone', '--depth', '1', 'https://github.com/wbthomason/packer.nvim', install_path})
{ "Failed to clone lazy.nvim:\n", "ErrorMsg" } vim.cmd [[packadd packer.nvim]]
}, true, {}) return true
vim.fn.getchar()
os.exit(1)
end end
return false
end end
vim.opt.rtp:prepend(lazypath)
require("lazy").setup({ local packer_bootstrap = ensure_packer()
spec = {
{ "nvim-lua/plenary.nvim" },
{ "nvim-telescope/telescope.nvim" },
{ "octarect/telescope-menu.nvim" },
{ "VonHeikemen/lsp-zero.nvim" },
{ "neovim/nvim-lspconfig" },
{ "hrsh7th/nvim-cmp" },
{ "hrsh7th/cmp-nvim-lsp" },
{ "L3MON4D3/LuaSnip" },
{ "saadparwaiz1/cmp_luasnip" },
{ "lervag/vimtex" },
{ "https://github.com/protex/better-digraphs.nvim" },
},
checker = { enabled = true },
})
-- }}}
local packer = require('packer').startup(function(use)
use 'wbthomason/packer.nvim'
use 'nvim-lua/plenary.nvim'
use 'nvim-telescope/telescope.nvim'
use 'octarect/telescope-menu.nvim'
use 'VonHeikemen/lsp-zero.nvim'
use 'neovim/nvim-lspconfig'
use 'hrsh7th/nvim-cmp'
use 'hrsh7th/cmp-nvim-lsp'
use 'L3MON4D3/LuaSnip'
use 'saadparwaiz1/cmp_luasnip'
use 'lervag/vimtex'
use 'https://github.com/protex/better-digraphs.nvim'
if packer_bootstrap then
require('packer').sync()
end
end);
-- -- }}}
nnoremap('<leader>ff', function() nnoremap('<leader>ff', function()
require('telescope.builtin').find_files() require('telescope.builtin').find_files()
end) end)
@ -165,23 +165,9 @@ lsp_zero.on_attach(function(client, bufnr)
lsp_zero.default_keymaps({buffer = bufnr}) lsp_zero.default_keymaps({buffer = bufnr})
end) end)
local lspconfig = require("lspconfig") require('lspconfig').lua_ls.setup({})
require('lspconfig').texlab.setup({})
lspconfig.lua_ls.setup({}) require('lspconfig').pylyzer.setup({})
lspconfig.texlab.setup({})
lspconfig.nixd.setup({})
lspconfig.pylsp.setup({
settings = {
pylsp = {
plugins = {
pycodestyle = {
ignore = {"W391"},
maxLineLength = 100,
}
}
}
}
})
-- }}} -- }}}
-- luasnip configuration {{{ -- luasnip configuration {{{
@ -208,23 +194,3 @@ luasnip.add_snippets("tex", {
}) })
}) })
-- }}} -- }}}
-- nvim-cmp setup {{{
local cmp = require("cmp")
cmp.setup({
sources = cmp.config.sources({
{ name = "nvim_lsp" },
{ name = "luasnip" },
}),
snippet = {
expand = function(args)
vim.snippet.expand(args.body)
end,
},
mapping = cmp.mapping.preset.insert({
['<C-h>'] = cmp.mapping.select_next_item({behavior = 'select'}),
['<C-k>'] = cmp.mapping.select_prev_item({behavior = 'select'}),
['<C-Space>'] = cmp.mapping.confirm({select = false}),
}),
})
-- }}}

View File

@ -1,3 +1,3 @@
# start the wm # start the wm
sxhkd-mode sxhkdrc sxhkd &
bspwm bspwm

View File

@ -1,13 +1,6 @@
# exit mouse mode # exit mouse mode
Escape Escape
sxhkd-mode sxhkdrc mode sxhkdrc
w
sxhkd-mode sxhkdrc
# send the escape key
]
xdotool key Escape
# move left # move left
{ctrl +,shift +,_} h {ctrl +,shift +,_} h
@ -35,16 +28,16 @@ q
# move the mouse to the top of the window # move the mouse to the top of the window
g ; g g ; g
bspwm-mouse top mousehelper top
# ditto for bottom # ditto for bottom
G G
bspwm-mouse bottom mousehelper bottom
# ditto for left # ditto for left
0 0
bspwm-mouse left mousehelper left
# ditto for right # ditto for right
dollar dollar
bspwm-mouse right mousehelper right

55
.config/sxhkd/sxhkdrc Normal file
View File

@ -0,0 +1,55 @@
# spawn a terminal
super + Return
st
# spawn the launcher
super + d
tmenu_run
# kill sxhkd with USR1 and restart bspwm
super + r
pkill -USR1 -x sxhkd; \
bspc wm -r
# reinitialize ancillary services
super + w
disp && keyboard
# control the national weather service
super + {_,shift + }n
nws {local,national}
# switch to "mouse mode"
super + m
mode mouse
# kill the current node
super + q
bspc node -c
# kill bspwm
super + e
bspc quit 0
# systemctl suspend
super + shift + e
systemctl suspend
# password menu
super + z
passmenu
# manipulate a node
super + {_,ctrl +,shift + }{h,j,k,l}
bspc node -{f,p,s} {west,south,north,east}
# change to or move a node to a desktop
super + {_,shift + } {1-9,0}
bspc {desktop -f,node -d} '{1-9,10}'
# change a node to tiling, floating, or fullscreen
super + {t,f,s}
bspc node -t {tiled,floating,fullscreen}
XF86RotateWindows
tabletmenu

View File

@ -1,5 +1,4 @@
path = "~/vdir/calendar/personal/*" path = "~/vdir/calendar/personal/*"
date_format = "%m-%d-%Y" date_format = "%m-%d-%Y"
time_format = "%H:%M" time_format = "%H:%M"
default_due = 0
default_list = "edfbeaf1-e9f3-4d94-a512-40cdafdbc7a0" default_list = "edfbeaf1-e9f3-4d94-a512-40cdafdbc7a0"

View File

@ -0,0 +1,92 @@
sanitize commandline tridactyllocal tridactylsync
" better thean google
set searchengine duckduckgo
" redirect youtube, reddit, twitter to proxies
autocmd DocStart https://www.youtube.com js let vsites = ["invidious.snopyta.org", "yewtu.be", "invidious.kavin.rocks", "vid.puffyan.us"]; tri.excmds.urlmodify("-t", "www.youtube.com", vsites[Math.floor(Math.random() * vsites.length)])
autocmd DocStart https://www.reddit.com js let rsites = ["libredd.it", "libreddit.spike.codes", "libreddit.kavin.rocks", "reddit.invak.id", "reddit.phii.me"]; tri.excmds.urlmodify("-t", "www.reddit.com", rsites[Math.floor(Math.random() * rsites.length)])
autocmd DocStart https://twitter.com js let tsites = ["nitter.dcs0.hu", "twitter.dr460nf1r3.org", "n.ramle.be", "nitter.cz", "nitter.nl"]; tri.excmds.urlmodify("-t", "www.twitter.com", tsites[Math.floor(Math.random() * tsites.length)])
" shamelessly stolen from glacambre
alias clone jsb -p tri.native.run("git clone '" + JS_ARG "' /home/usr/git" + JS_ARG.split("/").slide(-1))
alias so source ~/.tridactylrc
alias cookie sanitize cookies
alias clearhistory sanitize history
unbind <C-f>
set hintchars asdfhjkl
set incsearch true
set modindicatorshowkeys true
colors dark
" crap ton of setprefs
setpref app.normandy.first_run false
setpref app.normandy.migrationsApplied 10
setpref app.shield.optoutstudies.enabled false
setpref browser.aboutConfig.showWarning false
setpref browser.laterrun.enabled false
setpref browser.newtabpage.activity-stream.discoverystream.endpointSpocsClear "http://example.com"
setpref browser.newtabpage.activity-stream.discoverystream.endpoints "http://example.com"
setpref browser.newtabpage.activity-stream.feeds.section.highlights false
setpref browser.newtabpage.activity-stream.feeds.section.topstories false
setpref browser.newtabpage.activity-stream.feeds.snippets false
setpref browser.newtabpage.activity-stream.feeds.telemetry false
setpref browser.newtabpage.activity-stream.feeds.topsites false
setpref browser.newtabpage.activity-stream.impressionId "hmmst"
setpref browser.newtabpage.activity-stream.showSearch false
setpref browser.newtabpage.activity-stream.telemetry false
setpref browser.newtabpage.activity-stream.telemetry.structuredIngestion false
setpref browser.newtabpage.activity-stream.telemetry.structuredIngestion.endpoint "http://example.com"
setpref browser.ping-centre.telemetry false
setpref browser.search.suggest.enabled false
setpref browser.safebrowsing.appRepURL ""
setpref browser.safebrowsing.blockedURIs.enabled false
setpref browser.safebrowsing.downloads.remote.enabled false
setpref browser.safebrowsing.downloads.remote.url ""
setpref browser.safebrowsing.gethashURL ""
setpref browser.safebrowsing.malware.enabled false
setpref browser.safebrowsing.malware.reportURL ""
setpref browser.safebrowsing.phishing.enabled false
setpref browser.safebrowsing.provider.google.gethashURL ""
setpref browser.safebrowsing.provider.google.lists ""
setpref browser.safebrowsing.provider.google.reportMalwareMistakeURL ""
setpref browser.safebrowsing.provider.google.reportPhishMistakeURL ""
setpref browser.safebrowsing.provider.google.reportURL ""
setpref browser.safebrowsing.provider.google.updateURL ""
setpref browser.safebrowsing.provider.google4.dataSharing.enabled false
setpref browser.safebrowsing.provider.google4.dataSharingURL ""
setpref browser.safebrowsing.provider.google4.reportMalwareMistakeURL ""
setpref browser.safebrowsing.provider.google4.reportPhishMistakeURL ""
setpref browser.safebrowsing.provider.google4.reportURL ""
setpref browser.safebrowsing.provider.mozilla.gethashURL ""
setpref browser.safebrowsing.provider.mozilla.updateURL ""
setpref browser.safebrowsing.reportPhishURL ""
setpref browser.safebrowsing.reportURL ""
setpref browser.safebrowsing.updateURL ""
setpref dom.push.connection.enabled false
setpref dom.presentation.receiver.enabled
setpref extensions.pocket.api "example.com"
setpref extensions.pocket.enabled true
setpref geo.enabled false
setpref identity.fxaccounts.pairing.enabled false
setpref privacy.resistFingerprinting true
setpref privacy.trackingprotection.socialtracking.enabled true
setpref security.app_menu.recordEventTelemetry false
setpref security.certerrors.recordEventTelemetry false
setpref security.identitypopup.recordEventTelemetry false
setpref security.protectionspopup.recordEventTelemetry false
setpref toolkit.telemetry.archive.enabled false
setpref toolkit.telemetry.bhrPing.enabled false
setpref toolkit.telemetry.firstShutdownPing.enabled false
setpref toolkit.telemetry.newProfilePing.enabled false
setpref toolkit.telemetry.reportingpolicy.firstRun false
setpref toolkit.telemetry.server "http://example.com"
setpref toolkit.telemetry.server "IANA/IETF"
setpref toolkit.telemetry.shutdownPingSender.enabled false
setpref toolkit.telemetry.unified false
setpref toolkit.telemetry.updatePing.enabled false
setpref browser.newtabpage.activity-stream.discoverystream.enabled false
setpref browser.uiCustomization.state '{"placements":{"widget-overflow-fixed-list":[],"nav-bar":["back-button","forward-button","umatrix_raymondhill_net-browser-action","stop-reload-button","downloads-button","urlbar-container","vim-vixen_i-beam_org-browser-action"],"toolbar-menubar":["menubar-items"],"TabsToolbar":["tabbrowser-tabs","new-tab-button","alltabs-button"],"PersonalToolbar":["personal-bookmarks"]},"seen":["developer-button","umatrix_raymondhill_net-browser-action","vim-vixen_i-beam_org-browser-action"],"dirtyAreaCache":["nav-bar","toolbar-menubar","TabsToolbar","PersonalToolbar"],"currentVersion":16,"newElementCount":4}'
setpref privacy.resistFingerprinting.letterboxing false

View File

@ -56,10 +56,11 @@ type = "carddav"
url = "https://radicale.beepboop.systems/ryan/20cda0dd-5922-4905-8956-859c989a6519/" url = "https://radicale.beepboop.systems/ryan/20cda0dd-5922-4905-8956-859c989a6519/"
username = "ryan" username = "ryan"
password.fetch = ["command", "rbw", "get", "radicale"] password.fetch = ["command", "rbw", "get", "beepboop.systems radicale instance"]
[storage band_calendar_remote] [storage band_calendar_remote]
type = "http" type = "http"
url = "https://calendar.google.com/calendar/ical/i6bong6iferbcuf1u25jg47t7k%40group.calendar.google.com/public/basic.ics" url = "https://calendar.google.com/calendar/ical/i6bong6iferbcuf1u25jg47t7k%40group.calendar.google.com/public/basic.ics"
[storage pco_remote] [storage pco_remote]
@ -76,4 +77,4 @@ type = "caldav"
url = "https://radicale.beepboop.systems/ryan/edfbeaf1-e9f3-4d94-a512-40cdafdbc7a0/" url = "https://radicale.beepboop.systems/ryan/edfbeaf1-e9f3-4d94-a512-40cdafdbc7a0/"
username = "ryan" username = "ryan"
password.fetch = ["command", "rbw", "get", "radicale"] password.fetch = ["command", "rbw", "get", "beepboop.systems radicale instance"]

3
.gitmodules vendored
View File

@ -1,3 +0,0 @@
[submodule "lappy/builds/dwm"]
path = lappy/builds/dwm
url = https://git.beepboop.systems/stupidcomputer/dwm

View File

@ -1,4 +0,0 @@
stupidcomputer <ryan@beepboop.systems> <randomuser@tilde.club>
stupidcomputer <ryan@beepboop.systems>
stupidcomputer <ryan@beepboop.systems> <rndusr@beepboop.systems>
stupidcomputer <ryan@beepboop.systems> <Unixsys@github.com>

View File

@ -20,7 +20,7 @@ if you're trying to install `netbox`, then use the `--impure` flag:
`sudo nixos-rebuild --flake .#netbox switch --impure` `sudo nixos-rebuild --flake .#netbox switch --impure`
for installation onto Termux, run `make`. for alternate installations on non-NixOS hosts, a Makefile will be made available
things to do things to do
------------ ------------
@ -33,9 +33,7 @@ things to do
license license
------- -------
all materials in this repository, except for: all materials, except for:
a) `./home/wallpapers/pape.jpg`, which is of unknown licenses, and
* `./home/wallpapers/pape.jpg`, which is of unknown license, and b) ./builds/st, which is licensed under MIT, persuant to ./builds/st/LICENSE,
* `./builds/st`, which is licensed under MIT, persuant to `./builds/st/LICENSE`, is licensed under the GPLv3.
is (c) rndusr, randomuser, stupidcomputer, etc 2024 and licensed under the GPLv3 (see `./LICENSE`)

View File

@ -1 +0,0 @@
sudo nixos-rebuild --flake . switch --impure -I nixos-config=./

View File

@ -1,143 +0,0 @@
{ lib, config, pkgs, ...}:
{
imports = [
./hardware-configuration.nix
./nvidia.nix
./services
../../config
../../modules/hosts.nix
../../modules/bootstrap.nix
];
environment.systemPackages = with pkgs; [
wine
xdotool
libreoffice
texliveMedium
kdePackages.kdenlive
audacity
bespokesynth
musescore
unzip
ledger
unzip
imagemagick
pciutils
usbutils
ffmpeg
mdadm
git-annex
tigervnc
dmenu
(pkgs.callPackage ../../builds/archutils.nix {})
(pkgs.callPackage ../../builds/sssg.nix {})
];
services.hardware.bolt.enable = true; # thunderbolt support
hardware.bluetooth = {
enable = true;
settings = {
General = {
# AutoEnable = true;
Enable = "Source,Sink,Media,Socket";
# ControllerMode = "bredr";
};
};
};
boot.loader = {
efi = {
canTouchEfiVariables = true;
efiSysMountPoint = "/boot";
};
grub = {
efiSupport = true;
device = "nodev";
};
};
services = {
# enable printing
printing.enable = true;
avahi = {
enable = true; # runs the Avahi daemon
nssmdns4 = true; # enables the mDNS NSS plug-in
openFirewall = true; # opens the firewall for UDP port 5353
};
pipewire = {
enable = true;
extraConfig.pipewire = {
"properties" = {
default.clock.allowed-rates = [ 44100 48000 96000 ];
"log.level" = 4;
"default.clock.quantum" = 256;
"default.clock.min-quantum" = 256;
"default.clock.max-quantum" = 256;
};
};
alsa = {
enable = true;
support32Bit = true;
};
pulse.enable = true;
};
};
programs.adb.enable = true;
powerManagement.cpuFreqGovernor = "performance";
nixpkgs.config.allowUnfree = true;
networking = {
hostName = "copernicus";
firewall = {
enable = true;
interfaces = {
eno1 = {
allowedTCPPorts = [ 6000 ];
allowedTCPPortRanges = [
{ from = 1714; to = 1764; } # KDE Connect
{ from = 10000; to = 10100; } # temp stuff
];
allowedUDPPortRanges = [
{ from = 1714; to = 1764; } # KDE Connect
];
};
wg0 = {
# allow everything bound to the wg0 interface
allowedTCPPortRanges = [
{ from = 1; to = 35565; }
];
allowedUDPPortRanges = [
{ from = 1; to = 35565; }
];
};
};
};
};
services.getty.autologinUser = "usr";
time.timeZone = "America/Chicago";
i18n.defaultLocale = "en_US.UTF-8";
console = {
font = "Lat2-Terminus16";
keyMap = "us";
};
users.users.usr = {
isNormalUser = true;
extraGroups = [ "wheel" "networkmanager" "adbusers" ];
initialPassword = "usr";
};
system.stateVersion = "24.05"; # don't change this, lol
}

View File

@ -1,8 +0,0 @@
{ lib, config, pkgs, ...}:
{
imports = [
./wireguard.nix
./nextcloud.nix
];
}

View File

@ -1,25 +0,0 @@
{ lib, config, pkgs, ...}:
{
services.nextcloud = {
enable = true;
package = pkgs.nextcloud30;
hostName = "nextcloud.beepboop.systems";
config.adminpassFile = "/etc/nextcloud-admin";
settings.overwriteprotocol = "https";
extraApps = {
inherit (config.services.nextcloud.package.packages.apps) calendar tasks mail;
phonetrack = pkgs.fetchNextcloudApp {
sha256 = "sha256-V92f+FiS5vZEkq15A51pHoDpUOBfUOEVIcsXdP/rSMQ=";
license = "agpl3Only";
url = "https://github.com/julien-nc/phonetrack/releases/download/v0.8.1/phonetrack-0.8.1.tar.gz";
};
};
extraAppsEnable = true;
};
services.nginx.virtualHosts."${config.services.nextcloud.hostName}".listen = [ {
addr = "10.100.0.2";
port = 5028;
} ];
}

View File

@ -1,24 +0,0 @@
{ lib, config, pkgs, ... }:
{
networking = {
firewall.allowedUDPPorts = [ 50000 ];
wireguard.interfaces = {
wg0 = {
ips = [ "10.100.0.2/24" ];
listenPort = 50000;
privateKeyFile = "/home/usr/wg-keys/private";
peers = [
{ # netbox
publicKey = "0fOqAfsYO4HvshMPnlkKL7Z1RChq98hjDr0Q8o7OJFE=";
allowedIPs = [ "10.100.0.0/24" ]; # only stuff in the wg-subnet (10.100.0.*)
endpoint = "149.28.63.115:50000";
persistentKeepalive = 25;
}
];
};
};
};
}

View File

@ -0,0 +1,75 @@
{ lib, config, pkgs, ...}:
{
imports = [
./hardware-configuration.nix
../../modules/ssh-phone-home.nix
../../modules/bootstrap.nix
../../modules/hosts.nix
../../modules/common.nix
];
boot.loader.grub.enable = true;
boot.loader.grub.device = "/dev/sda";
networking.hostName = "mainsail";
services.getty.greetingLine = "
welcome to mainsail |`-:_
,----....____ | `+.
( ````----....|___ |
\\ _ ````----....____
\\ _) ```---.._
\\ \\
)`.\\ )`. )`. )`. )`. )`. )`. )`. )`. )`. )`.
-' `-' `-' `-' `-' `-' `-' `-' `-' `-' `-' `
";
environment.systemPackages = with pkgs; [
neovim
git
curl
];
services.home-assistant = {
enable = true;
extraComponents = [
# Components required to complete the onboarding
"netgear"
"hue"
"nest"
"esphome"
"met"
"radio_browser"
];
config = {
# Includes dependencies for a basic setup
# https://www.home-assistant.io/integrations/default_config/
default_config = {};
};
openFirewall = true;
};
services.openssh = {
enable = true;
settings = {
PermitRootLogin = "no";
PasswordAuthentication = false;
};
};
services.ssh-phone-home = {
enable = true;
localUser = "usr";
remoteHostname = "beepboop.systems";
remotePort = 443;
remoteUser = "ryan";
bindPort = 55554;
};
users.users.usr.openssh.authorizedKeys.keys = [
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKbhM3wj0oqjR3pUaZgpfX4Xo4dlzvBTbQ48zHyg7Pwx usr" # x230t
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIB2xUbQw9+RCPVw7qCFm4NNCP/MpS2BIArcwMv0KdKOI usr" # mlg
];
system.stateVersion = "23.11";
}

View File

@ -0,0 +1,32 @@
# Do not modify this file! It was generated by nixos-generate-config
# and may be overwritten by future invocations. Please make changes
# to /etc/nixos/configuration.nix instead.
{ config, lib, pkgs, modulesPath, ... }:
{
imports =
[ (modulesPath + "/installer/scan/not-detected.nix")
];
boot.initrd.availableKernelModules = [ "xhci_pci" "ehci_pci" "ahci" "usbhid" "usb_storage" "ums_realtek" "sd_mod" ];
boot.initrd.kernelModules = [ ];
boot.kernelModules = [ "kvm-intel" ];
boot.extraModulePackages = [ ];
fileSystems."/" =
{ device = "/dev/disk/by-uuid/948aeaf8-cb7e-4f85-ae3e-1bc6a25ec156";
fsType = "ext4";
};
fileSystems."/boot" =
{ device = "/dev/disk/by-uuid/617cb1ae-a788-429a-b0d4-63d46d8a4e1b";
fsType = "ext4";
};
swapDevices =
[ { device = "/dev/disk/by-uuid/d82ae76c-68f4-4e70-9162-5dab5f84375b"; }
];
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
}

78
boxes/mlg/default.nix Normal file
View File

@ -0,0 +1,78 @@
{ lib, config, pkgs, ...}:
{
imports = [
./hardware-configuration.nix
./nvidia.nix
../../modules/ssh-phone-home.nix
../../modules/hosts.nix
../../modules/bootstrap.nix
../../modules/common.nix
../../modules/x11.nix
../../modules/discord.nix
../../modules/gaming.nix
../../modules/rbw.nix
];
environment.systemPackages = with pkgs; [
wine
xdotool
qemu
virt-manager
libreoffice
nomacs
vscodium
thunderbird
libreoffice
texliveMedium
ledger
];
services.hardware.bolt.enable = true; # thunderbolt support
hardware.bluetooth = {
enable = true;
settings = {
General = {
Enable = "Source,Sink,Media,Socket";
ControllerMode = "bredr";
};
};
};
services.openssh.enable = true;
services.ssh-phone-home = {
enable = true;
localUser = "usr";
remoteHostname = "mainsail";
remotePort = 22;
remoteUser = "usr";
bindPort = 2222;
};
boot.loader = {
efi = {
canTouchEfiVariables = true;
efiSysMountPoint = "/boot";
};
grub = {
efiSupport = true;
device = "nodev";
};
};
services.printing.enable = true;
services.avahi.enable = true; # runs the Avahi daemon
services.avahi.nssmdns = true; # enables the mDNS NSS plug-in
services.avahi.openFirewall = true; # opens the firewall for UDP port 5353
powerManagement.cpuFreqGovernor = "performance";
nixpkgs.config.allowUnfree = true;
networking = {
hostName = "mlg";
firewall.enable = true;
};
system.stateVersion = "23.11"; # don't change this, lol
}

View File

@ -1,5 +1,6 @@
# Do not modify this file! It was generated by nixos-generate-config # Do not modify this file! It was generated by nixos-generate-config
# and may be overwritten by future invocations. Please make changes # and may be overwritten by future invocations. Please make changes
# testing
# to /etc/nixos/configuration.nix instead. # to /etc/nixos/configuration.nix instead.
{ config, lib, pkgs, modulesPath, ... }: { config, lib, pkgs, modulesPath, ... }:
@ -8,33 +9,33 @@
[ (modulesPath + "/installer/scan/not-detected.nix") [ (modulesPath + "/installer/scan/not-detected.nix")
]; ];
boot.initrd.availableKernelModules = [ "vmd" "xhci_pci" "ahci" "usbhid" "usb_storage" "sd_mod" ]; boot.initrd.availableKernelModules = [ "xhci_pci" "thunderbolt" "vmd" "nvme" "usb_storage" "sd_mod" ];
boot.initrd.kernelModules = [ ]; boot.initrd.kernelModules = [ ];
boot.kernelModules = [ "kvm-intel" "psmouse" "wacom" ]; boot.kernelModules = [ "kvm-intel" ];
boot.extraModulePackages = [ ]; boot.extraModulePackages = [ ];
fileSystems."/" = fileSystems."/" =
{ device = "/dev/disk/by-uuid/8182bde6-7213-4108-9dbf-951f76870207"; { device = "/dev/disk/by-uuid/eada30c2-ffc5-4410-b1cf-fcea6a4040ff";
fsType = "ext4"; fsType = "ext4";
}; };
fileSystems."/boot" = fileSystems."/boot" =
{ device = "/dev/disk/by-uuid/0D21-265A"; { device = "/dev/disk/by-uuid/5318-1A44";
fsType = "vfat"; fsType = "vfat";
options = [ "fmask=0022" "dmask=0022" ];
}; };
swapDevices = swapDevices = [ ];
[ { device = "/dev/disk/by-uuid/fc5366cc-2cec-415e-85dd-7c01a4e4fb4f"; }
];
# Enables DHCP on each ethernet and wireless interface. In case of scripted networking # Enables DHCP on each ethernet and wireless interface. In case of scripted networking
# (the default) this is the recommended approach. When using systemd-networkd it's # (the default) this is the recommended approach. When using systemd-networkd it's
# still possible to use this option, but it's recommended to use it in conjunction # still possible to use this option, but it's recommended to use it in conjunction
# with explicit per-interface declarations with `networking.interfaces.<interface>.useDHCP`. # with explicit per-interface declarations with `networking.interfaces.<interface>.useDHCP`.
networking.useDHCP = lib.mkDefault true; networking.useDHCP = lib.mkDefault true;
# networking.interfaces.eno1.useDHCP = lib.mkDefault true; # networking.interfaces.enp58s0.useDHCP = lib.mkDefault true;
# networking.interfaces.enp7s0.useDHCP = lib.mkDefault true;
# networking.interfaces.wlp0s20f3.useDHCP = lib.mkDefault true;
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
powerManagement.cpuFreqGovernor = lib.mkDefault "powersave";
hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
} }

10
boxes/mlg/home.nix Normal file
View File

@ -0,0 +1,10 @@
{ lib, inputs, config, pkgs, home, ... }:
{
imports = [
../../home/x11.nix
../../home/chromium
];
home.stateVersion = "23.11";
}

View File

@ -1 +0,0 @@
sudo nixos-rebuild --flake . switch --impure -I nixos-config=./

View File

@ -1,35 +1,14 @@
{ lib, config, pkgs, machines, ... }: { lib, config, pkgs, ... }:
{ {
imports = imports =
[ [
./hardware-configuration.nix ./hardware-configuration.nix
../../modules/bootstrap.nix ../../modules/bootstrap.nix
../../builds/gmail_mail_bridge.nix
./radicale.nix
./ssh.nix
./gitea.nix
./radicale.nix
./vaultwarden.nix
./sslh.nix
./nginx.nix
./franklincce.nix
./wireguard.nix
./nextcloud-bridge.nix
]; ];
nix = { networking.networkmanager.enable = true;
optimise = {
automatic = true;
dates = [ "02:30" ];
};
gc = {
automatic = true;
dates = "03:15";
options = "-d";
};
};
time.timeZone = "America/Chicago"; time.timeZone = "America/Chicago";
@ -47,80 +26,272 @@
tree tree
dig dig
htop htop
gnumake
neovim neovim
]; ];
system = { services.gmail_mail_bridge.enable = true;
copySystemConfiguration = true;
stateVersion = "23.05"; # don't change this, lol system.copySystemConfiguration = true;
system.stateVersion = "23.05"; # don't change this, lol
boot.loader.grub.enable = true;
boot.loader.grub.device = "/dev/vda";
services.sslh = {
enable = true;
settings.protocols = [
{
host = "localhost";
name = "ssh";
port = "55555";
service = "ssh";
}
{
host = "localhost";
name = "tls";
port = "442";
}
];
}; };
services.journald.extraConfig = '' networking.hostName = "netbox";
SystemMaxUse=1G
'';
system.userActivationScripts = { services.radicale = {
copyEssentialConfiguration = { enable = true;
# we don't want to bring in the entirety of home-manager for this, so just config = ''
# write some files as a hack [auth]
text = '' type = htpasswd
${pkgs.coreutils}/bin/cp /home/ryan/dot_testing/.config/bash/bashrc /home/ryan/.bashrc htpasswd_filename = radicale-passwd
${pkgs.coreutils}/bin/cp /home/ryan/dot_testing/.config/bash/profile /home/ryan/.bash_profile htpasswd_encryption = plain
${pkgs.coreutils}/bin/mkdir -p /home/ryan/.config/nvim '';
${pkgs.coreutils}/bin/cp /home/ryan/dot_testing/.config/nvim/init.min.lua /home/ryan/.config/nvim/init.lua };
'';
deps = []; services.rss2email = {
enable = true;
to = "ryan@beepboop.systems";
feeds = {
"eff" = {
url = "https://www.eff.org/rss/updates.xml";
};
"nixos" = {
url = "https://nixos.org/blog/announcements-rss.xml";
};
"drewdevault" = {
url = "https://drewdevault.com/blog/index.xml";
};
"nullprogram" = {
url = "https://nullprogram.com/feed/";
};
}; };
}; };
system.activationScripts = { services.fail2ban = {
copyEssentialConfiguration = { enable = true;
text = '' ignoreIP = [
${pkgs.coreutils}/bin/cp /home/ryan/dot_testing/.config/bash/bashrc /root/.bashrc "192.168.1.0/24"
${pkgs.coreutils}/bin/cp /home/ryan/dot_testing/.config/bash/profile /root/.bash_profile ];
${pkgs.coreutils}/bin/mkdir -p /root/.config/nvim extraPackages = [pkgs.ipset];
${pkgs.coreutils}/bin/cp /home/ryan/dot_testing/.config/nvim/init.min.lua /root/.config/nvim/init.lua banaction = "iptables-ipset-proto6-allports";
jails = {
"nginx-bruteforce" = ''
enabled = true
filter = nginx-bruteforce
logpath = /var/log/nginx/access.log
backend = auto
maxretry = 6
findtime = 600
'';
"postfix-bruteforce" = ''
enabled = true
filter = postfix-bruteforce
maxretry = 6
findtime = 600
''; '';
deps = [];
}; };
}; };
boot.loader = { environment.etc = {
grub.enable = true; "fail2ban/filter.d/nginx-bruteforce.conf".text = ''
grub.device = "/dev/vda"; [Definition]
failregex = ^<HOST>.*GET.*(matrix/server|\.php|admin|wp\-).* HTTP/\d.\d\" 404.*$
'';
"fail2ban/filter.d/postfix-bruteforce.conf".text = ''
[Definition]
failregex = warning: [\w\.\-]+\[<HOST>\]: SASL LOGIN authentication failed.*$
journalmatch = _SYSTEMD_UNIT=postfix.service
'';
}; };
users.users.ryan = { users.users.ryan = {
openssh.authorizedKeys.keys = [ openssh.authorizedKeys.keys = [
machines.copernicus.pubkey "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKbhM3wj0oqjR3pUaZgpfX4Xo4dlzvBTbQ48zHyg7Pwx usr" # x230t
machines.aristotle.pubkey "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIGrpVDLQszFKoYbvYKRyVTTpehxR0BVU47SXkz39l2wK usr" # mainsail
machines.phone.pubkey
]; ];
isNormalUser = true; isNormalUser = true;
extraGroups = [ "wheel" "docker" ]; extraGroups = [ "wheel" "docker" ];
}; };
networking = { services.openssh = {
usePredictableInterfaceNames = false; enable = true;
networkmanager.enable = true; ports = [55555];
hostName = "netbox"; };
firewall = { services.endlessh.enable = true;
enable = true; services.endlessh.port = 22;
interfaces = { services.vaultwarden.enable = true;
eth0 = { services.vaultwarden.config = {
allowedTCPPorts = [ 80 443 ]; DOMAIN = "https://bitwarden.beepboop.systems";
}; SIGNUPS_ALLOWED = false;
wg0 = { };
# allow everything bound to the wg0 interface
allowedTCPPortRanges = [ networking.usePredictableInterfaceNames = false;
{ from = 1; to = 35565; }
]; services.gitea = {
allowedUDPPortRanges = [ enable = true;
{ from = 1; to = 35565; } appName = "beepboop.systems"; # Give the site a name
]; database = {
}; type = "postgres";
}; passwordFile = "/etc/gittea-pass";
};
settings.security.INSTALL_LOCK = true;
settings.service.SHOW_REGISTRATION_BUTTON = false;
settings.ui.DEFAULT_THEME = "arc-green";
settings.api.ENABLE_SWAGGER = false;
settings.server = {
DOMAIN = "git.beepboop.systems";
ROOT_URL = "https://git.beepboop.systems/";
LANDING_PAGE = "explore";
HTTP_PORT = 3001;
}; };
}; };
services.postgresql = {
enable = true; # Ensure postgresql is enabled
authentication = ''
local gitea all ident map=gitea-users
'';
identMap = # Map the gitea user to postgresql
''
gitea-users gitea gitea
'';
};
services.nginx.enable = true;
services.nginx.clientMaxBodySize = "100m";
services.nginx.defaultSSLListenPort = 442;
services.nginx.virtualHosts."beepboop.systems" = {
forceSSL = true;
enableACME = true;
root = "/var/www/beepboop.systems";
locations."/" = {
extraConfig = ''
if ($request_uri ~ ^/(.*)\.html(\?|$)) {
return 302 /$1;
}
try_files $uri $uri.html $uri/ =404;
'';
};
};
services.nginx.virtualHosts."git.beepboop.systems" = {
forceSSL = true;
enableACME = true;
locations."/" = {
proxyPass = "http://localhost:3001";
};
};
services.nginx.virtualHosts."bit.beepboop.systems" = {
forceSSL = true;
enableACME = true;
globalRedirect = "bitwarden.beepboop.systems";
};
services.nginx.virtualHosts."bitwarden.beepboop.systems" = {
forceSSL = true;
enableACME = true;
locations."/" = {
proxyPass = "http://127.0.0.1:8000";
};
};
services.nginx.virtualHosts."radicale.beepboop.systems" = {
forceSSL = true;
enableACME = true;
locations."/" = {
proxyPass = "http://127.0.0.1:5232";
extraConfig = ''
proxy_set_header X-Script-Name /;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass_header Authorization;
'';
};
};
services.nginx.virtualHosts."calendar.beepboop.systems" = {
forceSSL = true;
enableACME = true;
globalRedirect = "radicale.beepboop.systems";
};
services.nginx.virtualHosts."cal.beepboop.systems" = {
forceSSL = true;
enableACME = true;
globalRedirect = "radicale.beepboop.systems";
};
services.nginx.virtualHosts."skillissue.agency" = {
forceSSL = true;
enableACME = true;
root = "/var/www/skillissue.agency";
};
security.acme = {
acceptTerms = true;
email = "nickforanick@protonmail.com";
};
# services.roundcube = {
# enable = true;
# # this is the url of the vhost, not necessarily the same as the fqdn of
# # the mailserver
# hostName = "cube.beepboop.systems";
# extraConfig = ''
# # starttls needed for authentication, so the fqdn required to match
# # the certificate
# $config['smtp_server'] = "tls://${config.mailserver.fqdn}";
# $config['smtp_user'] = "%u";
# $config['smtp_pass'] = "%p";
# '';
# };
services.nginx.virtualHosts."roundcube.beepboop.systems" = {
forceSSL = true;
enableACME = true;
globalRedirect = "cube.beepboop.systems";
};
services.nginx.virtualHosts."mail.beepboop.systems" = {
forceSSL = true;
enableACME = true;
locations."/bridge-submit" = {
extraConfig = ''
proxy_pass http://localhost:8041;
'';
};
locations."/" = {
extraConfig = ''
return 301 https://cube.beepboop.systems;
'';
};
};
networking.firewall = {
enable = true;
allowedTCPPorts = [ 80 443 ];
};
} }

View File

@ -1,41 +0,0 @@
{ lib, config, pkgs, ... }:
{
virtualisation.docker.enable = true;
services.nginx.virtualHosts."franklincce.beepboop.systems" = {
forceSSL = true;
enableACME = true;
locations."/" = {
proxyPass = "http://localhost:1337";
};
};
# WARNING WARNING WARNING
# the below is SUPER BAD and should not be copied ANYWHERE
# the docker container should be initialized by a flake or other nix concept,
# not this nonsense
systemd.services.franklincce = {
description = "the docker container that runs the franklincce app";
environment = { # this is EVIL, NEVER DO THIS!!!111!
NIX_PATH = "nixpkgs=flake:nixpkgs:/nix/var/nix/profiles/per-user/root/channels";
};
script = ''
cd /home/ryan
# don't fail if cloning the git repo fails
${pkgs.git}/bin/git clone https://git.beepboop.systems/stupidcomputer/yig yig || true
cd /home/ryan/yig
${pkgs.nix}/bin/nix-shell --command make
'';
serviceConfig = {
User = "ryan";
};
wantedBy = [ "multi-user.target" ];
};
}

View File

@ -1,46 +0,0 @@
{ lib, config, pkgs, ... }:
{
services.gitea = {
enable = true;
appName = "beepboop.systems"; # Give the site a name
database = {
type = "postgres";
passwordFile = "/etc/gittea-pass";
};
settings.security.INSTALL_LOCK = true;
settings.service = {
SHOW_REGISTRATION_BUTTON = false;
DISABLE_REGISTRATION = true;
};
settings.ui.DEFAULT_THEME = "arc-green";
settings.api.ENABLE_SWAGGER = false;
settings.server = {
DOMAIN = "git.beepboop.systems";
ROOT_URL = "https://git.beepboop.systems/";
LANDING_PAGE = "explore";
HTTP_PORT = 3001;
};
};
services.postgresql = {
enable = true; # Ensure postgresql is enabled
authentication = ''
local gitea all ident map=gitea-users
'';
identMap = # Map the gitea user to postgresql
''
gitea-users gitea gitea
'';
};
services.nginx.virtualHosts."git.beepboop.systems" = {
forceSSL = true;
enableACME = true;
locations."/" = {
proxyPass = "http://localhost:3001";
};
locations."/bridge" = {
proxyPass = "http://localhost:5000";
};
};
}

View File

@ -1,16 +0,0 @@
{ lib, config, pkgs, ... }:
{
services.nginx.virtualHosts."nextcloud.beepboop.systems" = {
forceSSL = true;
enableACME = true;
locations."/" = {
proxyPass = "http://10.100.0.2:5028";
proxyWebsockets = true;
extraConfig = ''
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
proxy_buffering off;
'';
};
};
}

View File

@ -1,51 +0,0 @@
{ lib, config, pkgs, ... }:
{
services.nginx.enable = true;
services.nginx.clientMaxBodySize = "100m";
services.nginx.defaultSSLListenPort = 442;
services.nginx.virtualHosts."beepboop.systems" = {
forceSSL = true;
enableACME = true;
root = "/var/www/beepboop.systems";
locations."/" = {
extraConfig = ''
port_in_redirect off;
absolute_redirect off;
'';
};
};
services.nginx.virtualHosts."tfb.beepboop.systems" = {
forceSSL = true;
enableACME = true;
locations."/" = {
extraConfig = ''
return 301 https://marching.beepboop.systems;
'';
};
locations."/groupme" = {
proxyPass = "http://10.100.0.2:7439";
};
};
services.nginx.virtualHosts."marching.beepboop.systems" = {
forceSSL = true;
enableACME = true;
root = "/var/www/tfb.beepboop.systems";
locations."/" = {
extraConfig = ''
port_in_redirect off;
absolute_redirect off;
'';
};
locations."/groupme" = {
proxyPass = "http://10.100.0.2:7439";
};
};
security.acme = {
acceptTerms = true;
defaults.email = "nickforanick@protonmail.com";
};
}

View File

@ -1,38 +0,0 @@
{ lib, config, pkgs, ... }:
{
services.radicale = {
enable = true;
settings = {
auth = {
type = "htpasswd";
htpasswd_filename = "radicale-passwd";
htpasswd_encryption = "plain";
};
};
};
services.nginx.virtualHosts."radicale.beepboop.systems" = {
forceSSL = true;
enableACME = true;
locations."/" = {
proxyPass = "http://127.0.0.1:5232";
extraConfig = ''
proxy_set_header X-Script-Name /;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass_header Authorization;
'';
};
};
services.nginx.virtualHosts."calendar.beepboop.systems" = {
forceSSL = true;
enableACME = true;
globalRedirect = "radicale.beepboop.systems";
};
services.nginx.virtualHosts."cal.beepboop.systems" = {
forceSSL = true;
enableACME = true;
globalRedirect = "radicale.beepboop.systems";
};
}

View File

@ -1,13 +0,0 @@
{ lib, config, pkgs, ... }:
{
services.openssh = {
enable = true;
ports = [55555];
settings = {
X11Forwarding = false;
PermitRootLogin = "no";
PasswordAuthentication = false;
};
};
}

View File

@ -1,19 +0,0 @@
{ lib, config, pkgs, ... }:
{
services.sslh = {
enable = true;
settings.protocols = [
{
host = "localhost";
name = "ssh";
port = "55555";
service = "ssh";
}
{
host = "localhost";
name = "tls";
port = "442";
}
];
};
}

View File

@ -1,22 +0,0 @@
{ lib, config, pkgs, ... }:
{
services.vaultwarden.enable = true;
services.vaultwarden.config = {
DOMAIN = "https://bitwarden.beepboop.systems";
SIGNUPS_ALLOWED = false;
};
services.nginx.virtualHosts."bit.beepboop.systems" = {
forceSSL = true;
enableACME = true;
globalRedirect = "bitwarden.beepboop.systems";
};
services.nginx.virtualHosts."bitwarden.beepboop.systems" = {
forceSSL = true;
enableACME = true;
locations."/" = {
proxyPass = "http://127.0.0.1:8000";
};
};
}

View File

@ -1,40 +0,0 @@
{ lib, config, pkgs, ... }:
{
networking = {
nat = {
enable = true;
externalInterface = "eth0";
internalInterfaces = [ "wg0" ];
};
firewall.allowedUDPPorts = [ 50000 ];
wireguard.interfaces = {
wg0 = {
ips = [ "10.100.0.1/24" ];
listenPort = 50000;
postSetup = ''
${pkgs.iptables}/bin/iptables -t nat -A POSTROUTING -s 10.100.0.0/24 -o eth0 -j MASQUERADE
'';
postShutdown = ''
${pkgs.iptables}/bin/iptables -t nat -D POSTROUTING -s 10.100.0.0/24 -o eth0 -j MASQUERADE
'';
privateKeyFile = "/home/ryan/wg-keys/private";
peers = [
{ # copernicus
publicKey = "JlH1X4KRT+B8Uau+qTLtBqyapkbGClIj1db7znU77kc=";
allowedIPs = [ "10.100.0.2/32" ];
}
{ # aristotle
publicKey = "Sw2yyMhyS8GOCWm1VuGn3Y7cfx606dXOGK5mux8ckQU=";
allowedIPs = [ "10.100.0.3/32" ];
}
];
};
};
};
}

View File

@ -0,0 +1,7 @@
{ config, pkgs, ... }:
{
nix.extraOptions = ''
experimental-features = nix-command flakes
'';
}

31
boxes/phone/default.nix Normal file
View File

@ -0,0 +1,31 @@
{ config, lib, pkgs, ... }:
{
imports = [
./bootstrap.nix
];
home-manager = {
backupFileExtension = "hm-bak";
useGlobalPkgs = true;
config = ./home.nix;
};
environment.packages = with pkgs; [
tigervnc
git
tmux
hostname
tigervnc
xorg.xinit
# tar
# awk
# sed
elinks
];
environment.etcBackupExtension = ".bak";
system.stateVersion = "23.05";
time.timeZone = "America/Chicago";
}

18
boxes/phone/home.nix Normal file
View File

@ -0,0 +1,18 @@
{ lib, pkgs, home, ... }:
{
imports = [
../../home/nvim
../../home/ssh
../../home/git # needed for flakes
../../home/vdirsyncer
../../home/isync
../../home/khal
../../home/todoman
../../home/msmtp
../../home/neomutt
../../home/rbw
( import ../../home/bash { isRoot = true; } )
];
home.stateVersion = "23.05";
}

View File

@ -1,2 +0,0 @@
app_cache/
gpapp_cache/

View File

@ -1,18 +0,0 @@
https://f-droid.org/repo/com.termux_1020.apk
https://f-droid.org/repo/com.termux.api_51.apk
https://f-droid.org/repo/com.termux.widget_13.apk
https://f-droid.org/repo/com.coboltforge.dontmind.multivnc_101.apk
https://f-droid.org/repo/com.kylecorry.trail_sense_124.apk
https://f-droid.org/repo/org.ligi.survivalmanual_428.apk
https://github.com/bitwarden/android/releases/download/v2024.4.0/com.x8bit.bitwarden.apk
https://f-droid.org/repo/at.bitfire.icsdroid_81.apk
https://f-droid.org/repo/ws.xsoh.etar_47.apk
https://f-droid.org/repo/at.bitfire.davdroid_404030200.apk
https://f-droid.org/repo/org.oxycblt.auxio_53.apk
https://f-droid.org/repo/de.danoeh.antennapod_3050095.apk
https://f-droid.org/repo/eu.faircode.email_2241.apk
https://f-droid.org/repo/org.koreader.launcher.fdroid_105232.apk
https://f-droid.org/repo/at.techbee.jtx_209010003.apk
https://f-droid.org/repo/mn.tck.semitone_4.apk
https://f-droid.org/repo/de.moekadu.tuner_38.apk
https://f-droid.org/repo/io.github.domi04151309.home_1100.apk

View File

@ -1,3 +0,0 @@
com.ministrycentered.PlanningCenter
com.groupme.android
com.brivo.pass

View File

@ -1,34 +0,0 @@
mkdir -p app_cache
for i in $(cat apps); do
output_name=$(echo $i | awk -F'/' '{print $NF}')
curl "$i" --max-redirs 999 -L -C - -o "app_cache/$output_name"
adb install "app_cache/$output_name"
done
mkdir -p gpapp_cache
for i in $(cat gpapps); do
apkeep -a "$i" ./gpapp_cache/
done
for i in $(ls gpapp_cache/ | grep xapk); do
# this is specific to planning center online
xapk_playground=$(mktemp)
rm $xapk_playground
mkdir $xapk_playground
cp gpapp_cache/$i $xapk_playground
cd $xapk_playground
mkdir out
unzip $i -d out
cd -
cd $xapk_playground/out
rm icon.png
rm manifest.json
adb install-multiple *
cd -
done
cd gpapp_cache
for i in $(ls | grep '\.apk'); do
adb install $i
done

View File

@ -1,7 +0,0 @@
{ pkgs ? import <nixpkgs> {} }:
pkgs.mkShell {
packages = [
pkgs.apkeep
];
}

View File

@ -1,4 +0,0 @@
git-annex-install
git-annex-install.*
git-annex.linux

View File

@ -1,90 +0,0 @@
termux: termux-pkgs termux-dots utils-sh rebuild-sh st pip-pkgs git-annex.linux sssg statusbar-polyfill
list: options # alias
options:
@echo specific options
@echo st - rebuild st
@echo utils-sh - copy utilities
@echo pip-pkgs - install pip packages
@echo termux-pkgs - install termux pkgs
@echo termux-dots - install termux dotfiles
@echo git-annex.linux - install git-annex
@echo sssg - install sssg
st:
-cd ../../../builds/st/ && CFLAGS="-DIS_PHONE" CC=clang make && cp st ~/.local/bin/st
utils-sh:
mkdir -p ~/.local/bin
cp ../../../builds/utils/* ~/.local/bin
rebuild-sh:
mkdir -p ~/.local/bin
cp ../../../builds/rebuild/* ~/.local/bin
pip-pkgs:
pip3 install vdirsyncer
pip3 install khal
# pip3 install khard
termux-pkgs:
pkg install -y \
tur-repo \
x11-repo
pkg install -y \
neovim \
python-pip \
feh \
xdotool \
git \
tig \
tigervnc \
sxhkd \
clang \
elinks \
tmux \
fontconfig \
xorgproto \
fzy \
man \
libxft \
firefox \
mupdf \
texlive-bin \
htop \
rbw \
pkg-config \
xorg-xrandr \
bspwm \
termux-api \
jq \
xclip \
isync \
neomutt \
pandoc \
wget \
which \
rsync \
openssl \
chromium
termux-dots:
mkdir -p ~/.local/bin
ln -sf $(CURDIR)/../../../.config ~/.config
ln -sf $(CURDIR)/../../../.config/ssh/config ~/.ssh/config
ln -sf ~/.config/bash/bashrc ~/.bashrc
ln -sf ~/.config/bash/profile ~/.bash_profile
mkdir -p ~/.local/share
cp $(CURDIR)/../../../home/wallpapers/pape.jpg ~/.local/share
mkdir -p ~/.shortcuts
cp $(CURDIR)/shortcuts/* ~/.shortcuts
git-annex.linux:
bash install-git-annex.sh
sssg:
-cp ~/git/sssg/sssg.sh ~/.local/bin/sssg
-chmod +x ~/.local/bin/sssg
statusbar-polyfill:
cp ~/dot_testing/builds/statusbar/termux-statusbar-polyfill ~/.local/bin

View File

@ -1,7 +0,0 @@
wget https://git-annex.branchable.com/install/Android/git-annex-install
MY_WD=$(pwd)
source git-annex-install || printf "failed\n"
cd "$MY_WD"
mv ~/git-annex.linux ./

View File

@ -1,19 +0,0 @@
#!/bin/sh
today=$(date "+%m/%d/%Y")
printf "Inputting height and weight information for today\n\n"
printf "Height?\n"
read -p "?>" height
printf "Weight?\n"
read -p "?>" weight
cd ~/pdbs
printf "\n%s %i" "$today" "$weight" >> weight.timeseries
printf "\n%s %i" "$today" "$height" >> height.timeseries
git add weight.timeseries height.timeseries
git commit -m "added height, weight data for $today"

View File

@ -1,19 +0,0 @@
#!/bin/sh
today=$(date "+%m/%d/%Y")
ledgerdate=$(date "+%Y/%m/%d")
printf "Inputting an expense for today\n\n"
printf "Payee name?\n"
read -p "?>" payee
printf "Amount?\n"
read -p "?>" amount
cd ~/pdbs
printf '%s * %s\n\tExpenses:%s $%s\n\tAssets:Greencard 4154\n\n' "$ledgerdate" "$payee" "$payee" "$amount" >> phone.ledger
git add phone.ledger
git commit -m "added an expense for $today"

View File

@ -1,9 +0,0 @@
register_habits=$(ls ~/pdbs/ |
grep '\.habit$' |
fzy)
if [ -z "$register_habits" ]; then
echo "you didn't choose one!"
else
date "+%m/%d/%Y" >> ~/pdbs/$register_habits
fi

View File

@ -1,31 +0,0 @@
#!/bin/sh
day5=$(date --date="5 days ago" "+%m/%d/%Y")
day4=$(date --date="4 days ago" "+%m/%d/%Y")
day3=$(date --date="3 days ago" "+%m/%d/%Y")
day2=$(date --date="2 days ago" "+%m/%d/%Y")
day1=$(date --date="1 days ago" "+%m/%d/%Y")
today=$(date "+%m/%d/%Y")
# $1 -- habit filename
show_past_habit () {
printf "%25s =========\n" "$1"
donein5days=$(grep -c "$day5" "$HOME/pdbs/$1")
donein4days=$(grep -c "$day4" "$HOME/pdbs/$1")
donein3days=$(grep -c "$day3" "$HOME/pdbs/$1")
donein2days=$(grep -c "$day2" "$HOME/pdbs/$1")
donein1days=$(grep -c "$day1" "$HOME/pdbs/$1")
donetoday=$(grep -c "$today" "$HOME/pdbs/$1")
printf "%.5s %.5s %.5s %.5s %.5s %.5s\n%5s %5s %5s %5s %5s %5s\n\n" \
"$day5" "$day4" "$day3" "$day2" "$day1" "$today" \
"$donein5days" "$donein4days" "$donein3days" \
"$donein2days" "$donein1days" "$donetoday"
}
habits=$(ls ~/pdbs | grep '\.habit$')
for i in $habits; do
show_past_habit "$i"
done
read THROWAWAY

19
boxes/virtbox/default.nix Normal file
View File

@ -0,0 +1,19 @@
{ lib, config, pkgs, ...}:
{
imports = [
./hardware-configuration.nix
../../modules/bootstrap.nix
../../modules/hosts.nix
../../modules/common.nix
../../modules/x11.nix
../../modules/discord.nix
];
boot.loader.grub.enable = true;
boot.loader.grub.device = "/dev/vda";
networking.hostName = "virtbox";
system.stateVersion = "23.11";
}

View File

@ -0,0 +1,31 @@
# Do not modify this file! It was generated by nixos-generate-config
# and may be overwritten by future invocations. Please make changes
# to /etc/nixos/configuration.nix instead.
{ config, lib, pkgs, modulesPath, ... }:
{
imports =
[ (modulesPath + "/profiles/qemu-guest.nix")
];
boot.initrd.availableKernelModules = [ "ahci" "xhci_pci" "virtio_pci" "sr_mod" "virtio_blk" ];
boot.initrd.kernelModules = [ ];
boot.kernelModules = [ "kvm-intel" ];
boot.extraModulePackages = [ ];
fileSystems."/" =
{ device = "/dev/disk/by-uuid/7b70ab88-296c-4737-90b2-267cb2432dc1";
fsType = "ext4";
};
swapDevices = [ ];
# Enables DHCP on each ethernet and wireless interface. In case of scripted networking
# (the default) this is the recommended approach. When using systemd-networkd it's
# still possible to use this option, but it's recommended to use it in conjunction
# with explicit per-interface declarations with `networking.interfaces.<interface>.useDHCP`.
networking.useDHCP = lib.mkDefault true;
# networking.interfaces.enp1s0.useDHCP = lib.mkDefault true;
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
}

9
boxes/virtbox/home.nix Normal file
View File

@ -0,0 +1,9 @@
{ lib, inputs, config, pkgs, home, ... }:
{
imports = [
../../home/x11.nix
];
home.stateVersion = "23.11";
}

65
boxes/x230t/default.nix Normal file
View File

@ -0,0 +1,65 @@
{ lib, config, pkgs, ...}:
{
imports = [
./hardware-configuration.nix
./special-ssh-magic.nix
../../modules/bootstrap.nix
../../modules/common.nix
../../modules/x11.nix
../../modules/hosts.nix
../../modules/tlp.nix
../../modules/media.nix
../../modules/anki.nix
../../modules/power-control.nix
../../modules/adb.nix
../../modules/rbw.nix
];
environment.systemPackages = with pkgs; [
xscreensaver
texliveFull
libreoffice
ecryptfs
ffmpeg
thunderbird
ledger
];
hardware.bluetooth = {
enable = true;
};
services.printing.enable = true;
services.avahi = {
enable = true;
nssmdns = true;
openFirewall = true;
};
services.udev.extraRules = ''
ACTION=="add", SUBSYSTEM=="input", KERNEL=="event[0-20]*", ENV{ID_INPUT_TOUCHSCREEN}=="1", MODE:="0666" GROUP="usr", SYMLINK+="input/touchscreen"
'';
users.users.usr.extraGroups = [ "input" ];
services.getty.autologinUser = "usr";
boot.loader = {
grub = {
timeoutStyle = "hidden";
enable = true;
device = "/dev/sda";
splashImage = null;
};
timeout = 1;
};
hardware.pulseaudio.enable = true;
networking.hostName = "x230t";
system.stateVersion = "23.11";
}

View File

@ -0,0 +1,33 @@
# Do not modify this file! It was generated by nixos-generate-config
# and may be overwritten by future invocations. Please make changes
# to /etc/nixos/configuration.nix instead.
{ config, lib, pkgs, modulesPath, ... }:
{
imports =
[ (modulesPath + "/installer/scan/not-detected.nix")
];
boot.initrd.availableKernelModules = [ "xhci_pci" "ehci_pci" "ahci" "usb_storage" "sd_mod" "sdhci_pci" ];
boot.initrd.kernelModules = [ ];
boot.kernelModules = [ ];
boot.extraModulePackages = [ ];
fileSystems."/" =
{ device = "/dev/disk/by-uuid/772f67d6-9434-42f1-aa3e-153e41affe4c";
fsType = "ext4";
};
swapDevices = [ ];
# Enables DHCP on each ethernet and wireless interface. In case of scripted networking
# (the default) this is the recommended approach. When using systemd-networkd it's
# still possible to use this option, but it's recommended to use it in conjunction
# with explicit per-interface declarations with `networking.interfaces.<interface>.useDHCP`.
networking.useDHCP = lib.mkDefault true;
# networking.interfaces.enp0s25.useDHCP = lib.mkDefault true;
# networking.interfaces.wlp3s0.useDHCP = lib.mkDefault true;
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
}

10
boxes/x230t/home.nix Normal file
View File

@ -0,0 +1,10 @@
{ lib, inputs, config, pkgs, home, ... }:
{
imports = [
../../home/x11.nix
../../home/chromium
];
home.stateVersion = "23.11";
}

View File

@ -0,0 +1,6 @@
{ lib, config, pkgs, ...}:
{
services.sshd.enable = true;
systemd.services.sshd.wantedBy = lib.mkForce [];
}

View File

@ -1,39 +0,0 @@
{ stdenv
, lib
, pkgs
, makeWrapper
, sxhkd
, bash
, feh
, jq
, fzy
, curl
, texliveFull
}:
stdenv.mkDerivation rec {
pname = "archutils";
version = "1.01";
src = ./archutils;
nativeBuildInputs = [ makeWrapper ];
buildInputs = [
bash
feh
jq
curl
fzy
texliveFull
];
installPhase = ''
mkdir -p $out/bin
for i in $(ls $src/); do
cp $src/$i $out/bin
ln -sf $out/bin/tmenu_run $out/bin/regenerate
wrapProgram $out/bin/$i --prefix PATH : ${lib.makeBinPath [ bash feh jq curl fzy texliveFull ]}
done
'';
}

View File

@ -1,118 +0,0 @@
#!/bin/sh
working_directory=$(date +%Y-%m-%d)
human_readable=$(date "+%d %b %Y")
cd ~/annex/briefs/
mkdir "$working_directory"
cd "$working_directory"
cat > main.tex <<EOF
\documentclass[oneside]{article}
\usepackage{amssymb}
\usepackage[left=1.5cm, right=1.5cm, top=1.5cm, bottom=1.5cm]{geometry}
\pagenumbering{gobble}
\begin{document}
\noindent {\Large Ryan Marina} \hspace{\fill} {\Large Briefing for $human_readable}
\noindent \textsc{Internal Document System} \hspace{\fill} $ \square $ \textit{scanned?} $ \square $ \textit{not scanned?}
\noindent \textit{Digital Archive Supplement} \hspace{\fill} internal notes: \rule{3cm}{0.4pt}
\noindent \texttt{iref:annex/briefs/$working_directory}
\vspace{0.4cm}
\noindent \textsc{Schedule}
\vspace{-0.30cm}
\noindent \rule{\textwidth}{0.4pt}
EOF
schedule=$(
khal list today today --format "{calendar}|{categories}|{start-time}|{end-time}|{title}" |
grep -E '^home\|school\||band\|'
)
IFS='
'
for class in $schedule; do
echo "$class" |
awk -F'|' '{
print "\\noindent " $5 " \\hspace{\\fill} \\textit{(" $3 "-" $4 ")}\n\n"
}' >> main.tex
done
cat >> main.tex <<EOF
\vspace{0.4cm}
\noindent \textsc{Unresolved Items}
\vspace{-0.30cm}
\noindent \rule{\textwidth}{0.4pt}
EOF
todo_items=$(
todo --porcelain |
jq -r '.[].summary'
)
IFS='
'
for todo in $todo_items; do
printf '\\noindent $ \\square $ %s\n\n' "$todo" >> main.tex
done
cat >> main.tex <<EOF
\vspace{0.4cm}
EOF
# generate notices
ssh netbox df -h |
grep /dev/vda3 |
awk -F' ' '{print "\\item \\texttt{" $1 "} on \\texttt{netbox} is at " $5 " utilization."}' |
sed 's/\%/\\%/g' > notices.tex
if [ -f notices.tex ]; then
cat >> main.tex <<EOF
\noindent \textsc{Procedural Notices}
\vspace{-0.30cm}
\noindent \rule{\textwidth}{0.4pt}
\begin{enumerate}
\input{notices}
\end{enumerate}
\vspace{0.4cm}
EOF
fi
cat >> main.tex <<EOF
\noindent \textsc{Items to be Appended to the Agenda}
\vspace{-0.30cm}
\noindent \rule{\textwidth}{0.4pt}
\end{document}
EOF
pdflatex main.tex
printf "[!] briefing generated\n"
printf "file:///home/usr/annex/briefs/%s/main.pdf\n" "$working_directory"

View File

@ -1,11 +0,0 @@
#!/bin/sh
temp=$(mktemp)
nvim $temp
IFS='
'
for i in $(cat $temp); do
todo new "$i"
done

View File

@ -1,3 +0,0 @@
#!/bin/sh
generate_daily_brief | tail -1 | sed 's|file://||g' | xargs lp -d EPSONTHING

View File

@ -0,0 +1,19 @@
{ lib, pkgs, config, ... }:
let
cfg = config.services.gmail_mail_bridge;
appEnv = pkgs.python3.withPackages (p: with p; [ waitress (callPackage ./gmail_mail_bridge/default.nix {}) ]);
in {
options.services.gmail_mail_bridge = {
enable = lib.mkEnableOption "Enable the gmail_mail_bridge";
};
config = lib.mkIf cfg.enable {
systemd.services.gmail_mail_bridge = {
wantedBy = [ "multi-user.target" ];
serviceConfig = {
ExecStart = "${appEnv}/bin/waitress-serve --port=8041 gmail_mail_bridge:app";
StandardOutput = "journal";
};
};
};
}

1
builds/gmail_mail_bridge/.gitignore vendored Normal file
View File

@ -0,0 +1 @@
__pycache_/

View File

@ -0,0 +1,10 @@
synchronize email from gmail accounts whose OAuth access is heavily restricted
background
----------
my school district disabled external OAuth access to email, which is not cool. this script gets around this and creates a bridge so you can recieve emails from your school email.
do note that this is heavily unpolished and most definately insecure. there are some hardcoded credentials (which you can change, it just takes a little technical know-how)
have fun!

View File

@ -0,0 +1,20 @@
{ pkgs, pythonPackages ? (import <nixpkgs> {}).python3Packages }:
pythonPackages.buildPythonPackage {
name = "gmail_mail_bridge";
src = ./gmail_mail_bridge;
propagatedBuildInputs = [ pythonPackages.flask pkgs.system-sendmail ];
installPhase = ''
runHook preInstall
mkdir -p $out/${pythonPackages.python.sitePackages}
cp -r . $out/${pythonPackages.python.sitePackages}/gmail_mail_bridge
runHook postInstall
'';
shellHook = "export FLASK_APP=gmail_mail_bridge";
format = "other";
}

View File

@ -0,0 +1,37 @@
from flask import Flask
from flask import request
from flask import redirect
from flask import abort
import logging
import smtplib
import email
from subprocess import Popen, PIPE, STDOUT
pre_shared_secret = "amongus sussy imposter"
to = "ryan@beepboop.systems"
app = Flask(__name__)
def handle_post(request):
msg = email.message_from_string(request.form["payload"])
del msg["To"]
msg["To"] = to
if not msg["From"]:
msg["From"] = "unknown-sender@mail.beepboop.systems"
s = smtplib.SMTP('localhost')
s.send_message(msg)
s.quit()
@app.route("/bridge-submit", methods = ["GET", "POST"])
def testing():
if request.method == 'POST':
data = request.form
if data['auth'] == pre_shared_secret:
handle_post(request)
else:
return 'you didn\'t use post'
return "default answer"

View File

@ -0,0 +1,12 @@
{ pkgs ? import (fetchTarball "https://github.com/NixOS/nixpkgs/tarball/nixos-23.11") {} }:
pkgs.mkShell {
packages = [
(pkgs.python3.withPackages (ps: [
ps.flask
]))
pkgs.curl
pkgs.jq
];
}

View File

@ -0,0 +1,23 @@
// google-side synchronization
// add a minute-wise trigger for mail synchronization
// go to the sidebar, select triggers, add a new one, configure it
// to run syncMail every minute
function syncMail() {
var threads = GmailApp.search("label:need_processing");
var label = GmailApp.getUserLabelByName("need_processing");
for (var thread of threads) {
for (var message of GmailApp.getMessagesForThread(thread)) {
var formData = {
auth: 'amongus sussy imposter',
payload: message.getRawContent(),
};
var options = {
'method' : 'POST',
'payload' : formData
};
var resp = UrlFetchApp.fetch('https://mail.beepboop.systems/bridge-submit', options);
}
thread.removeLabel(label);
}
}

View File

@ -18,8 +18,6 @@ stdenv.mkDerivation rec {
installPhase = '' installPhase = ''
mkdir -p $out/bin mkdir -p $out/bin
cp $src/rebuild $out/bin cp $src/rebuild $out/bin
cp $src/git-rebuild $out/bin
cp $src/nix-sanitation $out/bin
wrapProgram $out/bin/rebuild --prefix PATH : ${lib.makeBinPath [ bash ]} wrapProgram $out/bin/rebuild --prefix PATH : ${lib.makeBinPath [ bash ]}
''; '';

View File

@ -1,10 +0,0 @@
#!/bin/sh
# make sure we're in dot_testing
cd ~/dot_testing
git pull
git stash
git rebase
rebuild

View File

@ -1,7 +0,0 @@
#!/bin/sh
printf "clearing out nix caches\n"
sudo nix-collect-garbage -d
nix-collect-garbage -d
sudo nix-store --optimize

View File

@ -1,18 +1,4 @@
#!/bin/sh
cd ~/dot_testing cd ~/dot_testing
if [ "$(hostname)" = "localhost" ]; then
# we're on a phone
cd boxes/phone/out-of-tree
make $@
exit
fi
if [ -f "boxes/$(hostname)/custom_command" ]; then
eval "$(cat boxes/$(hostname)/custom_command)"
exit
fi
if [ -f "flake.nix" ]; then if [ -f "flake.nix" ]; then
sudo nixos-rebuild --flake . switch $@ sudo nixos-rebuild --flake . switch $@
else else

View File

@ -1,28 +0,0 @@
{ stdenv
, lib
, pkgs
, fetchgit
, makeWrapper
, bash
, pandoc
}:
stdenv.mkDerivation rec {
pname = "sssg";
version = "1.00";
src = fetchgit {
url = "https://git.beepboop.systems/stupidcomputer/sssg";
hash = "sha256-b0lbHsu628CKPNC6HDLApZQ4HsinTrXCoFqr1KdVIYE=";
};
nativeBuildInputs = [ makeWrapper ];
buildInputs = [ bash pandoc ];
installPhase = ''
mkdir -p $out/bin
cp $src/sssg.sh $out/bin/sssg
wrapProgram $out/bin/sssg --prefix PATH : ${lib.makeBinPath [ bash pandoc ]}
'';
}

View File

@ -7,8 +7,6 @@
, fontconfig , fontconfig
, freetype , freetype
, ncurses , ncurses
, fantasque-sans-mono
, lightMode ? false
, extraLibs ? [ ] , extraLibs ? [ ]
}: }:
@ -21,8 +19,7 @@ stdenv.mkDerivation rec {
nativeBuildInputs = [ pkg-config fontconfig freetype ncurses ]; nativeBuildInputs = [ pkg-config fontconfig freetype ncurses ];
buildInputs = [ libX11 libXft ] ++ extraLibs; buildInputs = [ libX11 libXft ] ++ extraLibs;
buildPhase = lib.optionalString (lightMode == true) "cp lightmode.h colors.h;" + buildPhase = ''
''
make make
''; '';

View File

@ -3,12 +3,7 @@
/* /*
* font: see http://freedesktop.org/software/fontconfig/fontconfig-user.html * font: see http://freedesktop.org/software/fontconfig/fontconfig-user.html
*/ */
#ifdef IS_PHONE
static char *font = "Monospace:pixelsize=34:antialias=true:autohint=true";
#else
static char *font = "Fantasque Sans Mono:pixelsize=14:antialias=true:autohint=true"; static char *font = "Fantasque Sans Mono:pixelsize=14:antialias=true:autohint=true";
#endif
static int borderpx = 2; static int borderpx = 2;
/* /*

View File

@ -1,20 +0,0 @@
/* Terminal colors (16 first used in escape sequence) */
static const char *colorname[] = {
/* solarized light */
"#eee8d5", /* 0: black */
"#dc322f", /* 1: red */
"#859900", /* 2: green */
"#b58900", /* 3: yellow */
"#268bd2", /* 4: blue */
"#d33682", /* 5: magenta */
"#2aa198", /* 6: cyan */
"#073642", /* 7: white */
"#fdf6e3", /* 8: brblack */
"#cb4b16", /* 9: brred */
"#93a1a1", /* 10: brgreen */
"#839496", /* 11: bryellow */
"#657b83", /* 12: brblue */
"#6c71c4", /* 13: brmagenta*/
"#586e75", /* 14: brcyan */
"#002b36", /* 15: brwhite */
};

View File

@ -1,2 +0,0 @@
{ pkgs ? import <nixpkgs> {} }:
pkgs.callPackage ./derivation.nix {}

View File

@ -1,10 +0,0 @@
{ lib, python3Packages }:
with python3Packages;
buildPythonApplication {
pname = "statusbar";
version = "1.0";
propagatedBuildInputs = [ ];
src = ./.;
}

View File

@ -1,23 +0,0 @@
from setuptools import setup, find_packages
setup(
name = 'pystatus',
version = '1.0.0',
author = 'stupidcomputer',
author_email = 'ryan@beepboop.systems',
url = 'https://git.beepboop.systems/stupidcomputer/dot_testing',
description = 'simple statusbar content program',
license = 'GPLv3',
entry_points = {
'console_scripts': [
'statusbar = statusbar.statusbar:main'
]
},
classifiers = (
"Programming Language :: Python :: 3",
"License :: OSI Approved :: GNU General Public License v3 (GPLv3)",
"Operating System :: POSIX :: Linux",
"Environment :: Console"
),
zip_safe = False
)

View File

@ -1 +0,0 @@
__pycache__/

View File

@ -1,215 +0,0 @@
from multiprocessing import Process, Queue
from collections import defaultdict
from sys import argv, stdout
from math import floor
from socket import gethostname
import datetime
import signal
import subprocess
import re
import os, socket, time
def find_all_belonging_to_monitor(splitted, monitor):
splitted = [i[1:] if i[1:] == monitor else i for i in splitted]
our_monitor = splitted.index(monitor)
next_monitor = None
for i in range(our_monitor, len(splitted)):
if splitted[i][0].lower() == "m":
next_monitor = i
break
if not next_monitor:
next_monitor = len(splitted) - 1
return splitted[our_monitor:next_monitor]
def generate_desktop_string(monitor_array):
output = []
for i in monitor_array:
if i[0] == "O":
output.append("*{}".format(i[1:]))
if i[0] == "o":
output.append("{}".format(i[1:]))
if i[0] == "F":
output.append("*{}".format(i[1:]))
return ' '.join(output)
def filemodfactory(filename: str, modname: str):
def filemod(queue, _):
orig = 0
while True:
new = os.path.getmtime(filename)
if(new > orig):
with open(filename, 'r') as f:
queue.put({
"module": modname,
"data": f.read().rstrip()
})
orig = new
time.sleep(0.1)
return filemod
def new_mail(queue, _):
while True:
try:
dir_output = os.listdir("/home/usr/Mail/main/INBOX/new")
except FileNotFoundError: # we're on the phone, no mail here
return
dir_output = len(dir_output)
queue.put({
"module": "newmail",
"data": str(dir_output)
})
time.sleep(20)
def bspwm(queue, monitor):
client = socket.socket(
socket.AF_UNIX,
socket.SOCK_STREAM
)
try:
client.connect("/tmp/bspwm_1_0-socket")
except: # perhaps we're on the phone?
client.connect("/data/data/com.termux/files/usr/tmp/bspwm_1_0-socket")
message = "subscribe\0".encode()
client.send(message)
while True:
resp = client.recv(1024).decode().rstrip()
splitted = resp[1:].split(":")
if not monitor == "all":
monitor_array = find_all_belonging_to_monitor(splitted, monitor)
else:
monitor_array = splitted
queue.put({
"module": "bspwm",
"data": generate_desktop_string(monitor_array)
})
client.close()
def clock(queue, _):
while True:
queue.put({
"module": "clock",
"data": datetime.datetime.now().strftime("%d/%m | %H:%M")
})
time.sleep(60)
def filecheckerfactory(filename: str, modname: str, timeout=60):
def filechecker(queue, _):
while True:
try:
file = open(filename)
buf = file.read(128).rstrip()
queue.put({
"module": modname,
"data": buf
})
except FileNotFoundError:
pass
time.sleep(timeout)
return filechecker
battery = filecheckerfactory("/sys/class/power_supply/BAT0/capacity", "bat")
batterystatus = filecheckerfactory("/sys/class/power_supply/BAT0/status", "batstat")
sxhkdmode = filemodfactory("/home/usr/.cache/statusbar/sxhkd_mode", "sxhkdmode")
def render(modules) -> str:
columns, _ = os.get_terminal_size(0)
left = "{} | {}({})".format(modules["clock"], modules["bspwm"], modules["sxhkdmode"])
right = "{} {}({})".format(modules["newmail"], modules["bat"], modules["batstat"])
padding = " " * (columns - len(left) - len(right) - 0)
output = left + padding + right
# special battery trickery
try:
batt_percentage = int(modules["bat"]) / 100
except ValueError:
batt_percentage = 1
highlighted = floor(columns * batt_percentage)
output = "\033[?25l\033[2J\033[H\033[4m" + \
output[:highlighted] + \
"\033[24m" + \
output[highlighted:]
print(output, end='')
stdout.flush()
def start_statusbars():
# is there an actually good xrandr library?
xrandr = subprocess.Popen(['xrandr'], stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
output = list(xrandr.stdout)
output = [i.decode("utf-8") for i in output if " connected" in i.decode("utf-8")]
serialized = []
for i in output:
splitted = i.split(' ')
print(splitted)
displayname = splitted[0]
geometry = splitted[2]
if geometry == "primary":
geometry = splitted[3]
try:
geometry_splitted = [int(i) for i in geometry.replace('x', '+').split('+')]
except ValueError:
continue
geometry_splitted[1] = 20
print(displayname, geometry_splitted)
os.system("st -c statusbar -p -g {}x{}+{}+{} -e statusbar {} & disown".format(
*map(str, geometry_splitted),
displayname
))
def main():
try:
os.mkdir("/home/usr/.cache/statusbar")
except FileExistsError:
pass
except FileNotFoundError:
# we're on the phone
try:
os.mkdir("/data/data/com.termux/files/home/.cache/statusbar")
except FileExistsError:
pass
if argv[1] == "start_statusbars":
hostname = gethostname()
if not hostname == "localhost": # if we're not the phone
start_statusbars()
else:
# we are the phone
os.system("/data/data/com.termux/files/usr/bin/bash -c 'st -c statusbar -p -g {}x{}+{}+{} -e termux-statusbar-polyfill {} & disown'".format(
1920, 50, 0, 980,
"VNC-0"
))
return
queue = Queue()
modules = [bspwm, clock, battery, batterystatus, sxhkdmode, new_mail]
[Process(target=module, args=(queue, argv[1])).start() for module in modules]
module_outputs = defaultdict(lambda: "")
while True:
result = queue.get()
module_outputs[result["module"]] = result["data"]
render(module_outputs)
if __name__ == "__main__":
main()

View File

@ -1,3 +0,0 @@
#!/bin/sh
python3 ~/dot_testing/builds/statusbar/statusbar/statusbar.py $@

View File

@ -1,6 +1,8 @@
{ stdenv { stdenv
, lib , lib
, pkgs # for statusbar
, pkg-config
, libxcb
# shell scripts stuff # shell scripts stuff
, makeWrapper , makeWrapper
, sshuttle , sshuttle
@ -9,20 +11,17 @@
, bash , bash
, feh , feh
, jq , jq
, ffmpeg
, fzy , fzy
, figlet , figlet
, curl , curl
, ytfzf , ytfzf
, xrandr , xrandr
, xrectsel
, ffcast
, svkbd , svkbd
, xkbset , xkbset
, rbw , rbw
, xclip , xclip
, x11vnc , libsForQt5
, xmessage
, imagemagick
}: }:
stdenv.mkDerivation rec { stdenv.mkDerivation rec {
@ -31,15 +30,23 @@ stdenv.mkDerivation rec {
src = ./utils; src = ./utils;
nativeBuildInputs = [ makeWrapper ]; nativeBuildInputs = [ makeWrapper pkg-config libxcb ];
buildInputs = [ bash feh xrandr jq curl fzy ytfzf sshuttle svkbd scrcpy rbw xclip ffcast xkbset xmessage imagemagick x11vnc ]; buildInputs = [ libxcb bash feh xrandr jq curl fzy ytfzf ffmpeg sshuttle svkbd scrcpy xkbset rbw xclip libsForQt5.kolourpaint ];
buildPhase = ''
ls
make
'';
installPhase = '' installPhase = ''
mkdir -p $out/bin mkdir -p $out/bin
for i in $(ls $src/); do for i in $(ls $src/sh); do
cp $src/$i $out/bin cp $src/sh/$i $out/bin
wrapProgram $out/bin/$i --prefix PATH : ${lib.makeBinPath [ sxhkd bash feh xrandr jq figlet curl fzy xkbset ytfzf sshuttle svkbd scrcpy xrectsel ffcast xmessage imagemagick x11vnc ]} ln -sf $out/bin/tmenu_run $out/bin/regenerate
wrapProgram $out/bin/$i --prefix PATH : ${lib.makeBinPath [ sxhkd bash feh xrandr jq figlet curl fzy ytfzf ffmpeg sshuttle svkbd scrcpy libsForQt5.kolourpaint ]}
done done
cp c/status/main $out/bin/statusbar
''; '';
} }

3
builds/utils/Makefile Normal file
View File

@ -0,0 +1,3 @@
.PHONY: main
main:
make -C c/status -f Makefile

5
builds/utils/TODO Normal file
View File

@ -0,0 +1,5 @@
TODO LIST
---------
- fix paste
- make the c programs less buggy and let them not suck as much

2
builds/utils/c/status/.gitignore vendored Normal file
View File

@ -0,0 +1,2 @@
main
*.o

View File

@ -0,0 +1,9 @@
LDFLAGS=`pkg-config --cflags --libs xcb`
CFLAGS=-ggdb -fsanitize=address
main: battery.o bspwm.o time.o battstatus.o message.o
clean:
rm *.o main
run:
./main

View File

@ -0,0 +1,4 @@
status
------
a simple statusbar script thing (tm)

Some files were not shown because too many files have changed in this diff Show More