import from old repo
This commit is contained in:
commit
57fddaead2
119 changed files with 4692 additions and 0 deletions
3
.gitignore
vendored
Normal file
3
.gitignore
vendored
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
/wip
|
||||||
|
result
|
||||||
|
result-*
|
2
config/zsh/components/console-256color.zsh
Normal file
2
config/zsh/components/console-256color.zsh
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
# works well enough
|
||||||
|
[[ "$TERM" == "linux" ]] && TERM=xterm-256color
|
4
config/zsh/components/fuzzy-tab.zsh
Normal file
4
config/zsh/components/fuzzy-tab.zsh
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
zstyle ':completion:*' matcher-list '' \
|
||||||
|
'm:{a-z\-}={A-Z\_}' \
|
||||||
|
'r:[^[:alpha:]]||[[:alpha:]]=** r:|=* m:{a-z\-}={A-Z\_}' \
|
||||||
|
'r:|?=** m:{a-z\-}={A-Z\_}'
|
31
config/zsh/components/highlight-theme.zsh
Normal file
31
config/zsh/components/highlight-theme.zsh
Normal file
|
@ -0,0 +1,31 @@
|
||||||
|
# zsh-syntax-highlighting
|
||||||
|
typeset -A ZSH_HIGHLIGHT_STYLES
|
||||||
|
|
||||||
|
ZSH_HIGHLIGHT_STYLES[precommand]='fg=33'
|
||||||
|
|
||||||
|
ZSH_HIGHLIGHT_STYLES[arg0]='fg=39'
|
||||||
|
|
||||||
|
ZSH_HIGHLIGHT_STYLES[single-hyphen-option]='fg=229'
|
||||||
|
ZSH_HIGHLIGHT_STYLES[double-hyphen-option]='fg=228'
|
||||||
|
|
||||||
|
ZSH_HIGHLIGHT_STYLES[autodirectory]='fg=blue'
|
||||||
|
|
||||||
|
ZSH_HIGHLIGHT_STYLES[path]='none'
|
||||||
|
# HACK: performance fix assuming "none" isn't truly none
|
||||||
|
ZSH_HIGHLIGHT_DIRS_BLACKLIST+=(/*)
|
||||||
|
|
||||||
|
# fix aliased highlighting of suid precmds
|
||||||
|
typeset -A ZSH_HIGHLIGHT_PATTERNS
|
||||||
|
|
||||||
|
ZSH_HIGHLIGHT_PATTERNS+=('doas' 'fg=33')
|
||||||
|
ZSH_HIGHLIGHT_PATTERNS+=('sudo' 'fg=33')
|
||||||
|
|
||||||
|
ZSH_HIGHLIGHT_HIGHLIGHTERS=(main pattern)
|
||||||
|
|
||||||
|
# set up LS_COLORS
|
||||||
|
if which dircolors >/dev/null 2>&1; then
|
||||||
|
export $(dircolors)
|
||||||
|
fi
|
||||||
|
|
||||||
|
# colorful tab completion listings
|
||||||
|
zstyle ':completion:*' list-colors "${(s.:.)LS_COLORS}"
|
7
config/zsh/components/history.zsh
Normal file
7
config/zsh/components/history.zsh
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
HISTFILE=~/.cache/zsh_history
|
||||||
|
HISTSIZE=15000
|
||||||
|
SAVEHIST=10000
|
||||||
|
setopt share_history
|
||||||
|
setopt hist_expire_dups_first
|
||||||
|
setopt hist_no_functions hist_no_store hist_reduce_blanks
|
||||||
|
setopt hist_verify
|
38
config/zsh/components/keybinds.zsh
Normal file
38
config/zsh/components/keybinds.zsh
Normal file
|
@ -0,0 +1,38 @@
|
||||||
|
# partial outtake from ohmyzsh lib/key-bindings.zsh
|
||||||
|
# https://github.com/ohmyzsh/ohmyzsh/pull/1355/files
|
||||||
|
if (( ${+terminfo[smkx]} )) && (( ${+terminfo[rmkx]} )); then
|
||||||
|
function zle-line-init() {
|
||||||
|
echoti smkx
|
||||||
|
}
|
||||||
|
function zle-line-finish() {
|
||||||
|
echoti rmkx
|
||||||
|
}
|
||||||
|
zle -N zle-line-init
|
||||||
|
zle -N zle-line-finish
|
||||||
|
fi
|
||||||
|
|
||||||
|
bindkey -e # Use emacs key bindings
|
||||||
|
|
||||||
|
bindkey '\ew' kill-region # [Esc-w] - Kill from the cursor to the mark
|
||||||
|
bindkey -s '\el' 'ls\n' # [Esc-l] - run command: ls
|
||||||
|
bindkey '^r' history-incremental-search-backward # [Ctrl-r] - Search backward incrementally for a specified string. The string may begin with ^ to anchor the search to the beginning of the line.
|
||||||
|
bindkey "${terminfo[kpp]}" up-line-or-history # [PageUp] - Up a line of history
|
||||||
|
bindkey "${terminfo[knp]}" down-line-or-history # [PageDown] - Down a line of history
|
||||||
|
|
||||||
|
bindkey "${terminfo[kcuu1]}" history-substring-search-up
|
||||||
|
bindkey "${terminfo[kcud1]}" history-substring-search-down
|
||||||
|
|
||||||
|
bindkey "${terminfo[khome]}" beginning-of-line # [Home] - Go to beginning of line
|
||||||
|
bindkey "${terminfo[kend]}" end-of-line # [End] - Go to end of line
|
||||||
|
|
||||||
|
bindkey ' ' magic-space # [Space] - do history expansion
|
||||||
|
|
||||||
|
bindkey '^[[1;5C' forward-word # [Ctrl-RightArrow] - move forward one word
|
||||||
|
bindkey '^[[1;5D' backward-word # [Ctrl-LeftArrow] - move backward one word
|
||||||
|
|
||||||
|
bindkey "${terminfo[kcbt]}" reverse-menu-complete # [Shift-Tab] - move through the completion menu backwards
|
||||||
|
|
||||||
|
bindkey '^?' backward-delete-char # [Backspace] - delete backward
|
||||||
|
bindkey "${terminfo[kdch1]}" delete-char # [Delete] - delete forward
|
||||||
|
|
||||||
|
|
2
config/zsh/components/magic-space.zsh
Normal file
2
config/zsh/components/magic-space.zsh
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
bindkey ' ' magic-space
|
||||||
|
bindkey '^ ' autosuggest-accept
|
15
config/zsh/components/misc.zsh
Normal file
15
config/zsh/components/misc.zsh
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
# allow using comments in interactive
|
||||||
|
setopt interactive_comments
|
||||||
|
|
||||||
|
# basic support for the omz theme format
|
||||||
|
setopt prompt_subst
|
||||||
|
|
||||||
|
# completions
|
||||||
|
autoload -U compinit
|
||||||
|
compinit
|
||||||
|
# allow fully dynamic alias completion - like it's supposed to be
|
||||||
|
unsetopt complete_aliases
|
||||||
|
|
||||||
|
setopt glob_complete
|
||||||
|
setopt glob_star_short
|
||||||
|
unsetopt bad_pattern
|
43
config/zsh/components/navigation.zsh
Normal file
43
config/zsh/components/navigation.zsh
Normal file
|
@ -0,0 +1,43 @@
|
||||||
|
alias d="dirs -v | head -n10"
|
||||||
|
|
||||||
|
# backdir auto expansion: ... -> ../..
|
||||||
|
function rationalise-dot() {
|
||||||
|
local MATCH # keep the regex match from leaking to the environment
|
||||||
|
if [[ $LBUFFER =~ '(^|/| | |'$'\n''|\||;|&)\.\.$' && ! $LBUFFER = p4* ]]; then
|
||||||
|
#if [[ ! $LBUFFER = p4* && $LBUFFER = *.. ]]; then
|
||||||
|
LBUFFER+=/..
|
||||||
|
else
|
||||||
|
zle self-insert
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
zle -N rationalise-dot
|
||||||
|
bindkey '\e.' rationalise-dot
|
||||||
|
bindkey -M isearch . self-insert
|
||||||
|
|
||||||
|
# absolutize a relative path, or vice versa, or alternatively insert the cwd
|
||||||
|
function insert-cwd-or-absolute() {
|
||||||
|
local MATCH # keep the regex match from leaking to the environment
|
||||||
|
# match anything that could be a path
|
||||||
|
if [[ $LBUFFER =~ '(|'$'\n''|\||;|&)[^= ]+$' && ! $LBUFFER = p4* ]]; then
|
||||||
|
# make sure it exists
|
||||||
|
if [[ -e $MATCH ]]; then
|
||||||
|
local XMATCH="$MATCH"
|
||||||
|
# absolute - make relative
|
||||||
|
if [[ $XMATCH =~ '^/' ]]; then
|
||||||
|
# cut away the last piece of the buffer
|
||||||
|
local LENGTH=$(( $#LBUFFER - $#XMATCH ))
|
||||||
|
LBUFFER="${LBUFFER:0:${LENGTH}}"
|
||||||
|
# and replace it with a relative realpath
|
||||||
|
LBUFFER+="$(realpath --relative-to=. $XMATCH)"
|
||||||
|
else # relative - make absolute
|
||||||
|
local LENGTH=$(( $#LBUFFER - $#XMATCH ))
|
||||||
|
LBUFFER="${LBUFFER:0:${LENGTH}}"
|
||||||
|
LBUFFER+="$(realpath $XMATCH)"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
LBUFFER+=$(pwd)
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
zle -N insert-cwd-or-absolute
|
||||||
|
bindkey '\ed' insert-cwd-or-absolute
|
88
config/zsh/components/theme-common-mod.zsh
Normal file
88
config/zsh/components/theme-common-mod.zsh
Normal file
|
@ -0,0 +1,88 @@
|
||||||
|
# vim: filetype=sh
|
||||||
|
|
||||||
|
# Prompt symbol
|
||||||
|
COMMON_PROMPT_SYMBOL="Ψ"
|
||||||
|
|
||||||
|
# Colors
|
||||||
|
COMMON_COLORS_HOST_ME=green
|
||||||
|
COMMON_COLORS_HOST_AWS_VAULT=yellow
|
||||||
|
COMMON_COLORS_CURRENT_DIR=blue
|
||||||
|
COMMON_COLORS_RETURN_STATUS_TRUE=99
|
||||||
|
COMMON_COLORS_RETURN_STATUS_FALSE=red
|
||||||
|
COMMON_COLORS_GIT_STATUS_DEFAULT=green
|
||||||
|
COMMON_COLORS_GIT_STATUS_STAGED=red
|
||||||
|
COMMON_COLORS_GIT_STATUS_UNSTAGED=yellow
|
||||||
|
COMMON_COLORS_GIT_PROMPT_SHA=green
|
||||||
|
COMMON_COLORS_BG_JOBS=yellow
|
||||||
|
|
||||||
|
# Left Prompt
|
||||||
|
PROMPT='$(common_host)$(common_current_dir)$(common_bg_jobs)$(common_return_status)'
|
||||||
|
|
||||||
|
# Right Prompt
|
||||||
|
RPROMPT='$(common_git_status)'
|
||||||
|
|
||||||
|
# Prompt with current SHA
|
||||||
|
# PROMPT='$(common_host)$(common_current_dir)$(common_bg_jobs)$(common_return_status)'
|
||||||
|
# RPROMPT='$(common_git_status) $(git_prompt_short_sha)'
|
||||||
|
|
||||||
|
# Host
|
||||||
|
common_host() {
|
||||||
|
if [[ -n $SSH_CONNECTION ]]; then
|
||||||
|
me="%n@%m"
|
||||||
|
elif [[ $LOGNAME != $USER ]]; then
|
||||||
|
me="%n"
|
||||||
|
fi
|
||||||
|
if [[ -n $me ]]; then
|
||||||
|
echo "%{$fg[$COMMON_COLORS_HOST_ME]%}$me%{$reset_color%}:"
|
||||||
|
fi
|
||||||
|
if [[ $AWS_VAULT ]]; then
|
||||||
|
echo "%{$fg[$COMMON_COLORS_HOST_AWS_VAULT]%}$AWS_VAULT%{$reset_color%} "
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Current directory
|
||||||
|
common_current_dir() {
|
||||||
|
echo -n "%{$fg[$COMMON_COLORS_CURRENT_DIR]%}%c "
|
||||||
|
}
|
||||||
|
|
||||||
|
# Prompt symbol
|
||||||
|
common_return_status() {
|
||||||
|
echo -n "%(?.%F{$COMMON_COLORS_RETURN_STATUS_TRUE}.%F{$COMMON_COLORS_RETURN_STATUS_FALSE})$COMMON_PROMPT_SYMBOL%f "
|
||||||
|
}
|
||||||
|
|
||||||
|
# Git status
|
||||||
|
common_git_status() {
|
||||||
|
local message=""
|
||||||
|
local message_color="%F{$COMMON_COLORS_GIT_STATUS_DEFAULT}"
|
||||||
|
|
||||||
|
# https://git-scm.com/docs/git-status#_short_format
|
||||||
|
local staged=$(git status --porcelain 2>/dev/null | grep -e "^[MADRCU]")
|
||||||
|
local unstaged=$(git status --porcelain 2>/dev/null | grep -e "^[MADRCU? ][MADRCU?]")
|
||||||
|
|
||||||
|
if [[ -n ${staged} ]]; then
|
||||||
|
message_color="%F{$COMMON_COLORS_GIT_STATUS_STAGED}"
|
||||||
|
elif [[ -n ${unstaged} ]]; then
|
||||||
|
message_color="%F{$COMMON_COLORS_GIT_STATUS_UNSTAGED}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
local branch=$(git rev-parse --abbrev-ref HEAD 2>/dev/null)
|
||||||
|
if [[ -n ${branch} ]]; then
|
||||||
|
message+="${message_color}${branch}%f"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo -n "${message}"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Git prompt SHA
|
||||||
|
ZSH_THEME_GIT_PROMPT_SHA_BEFORE="%{%F{$COMMON_COLORS_GIT_PROMPT_SHA}%}"
|
||||||
|
ZSH_THEME_GIT_PROMPT_SHA_AFTER="%{$reset_color%} "
|
||||||
|
|
||||||
|
# Background Jobs
|
||||||
|
common_bg_jobs() {
|
||||||
|
bg_status="%{$fg[$COMMON_COLORS_BG_JOBS]%}%(1j.↓%j .)"
|
||||||
|
echo -n $bg_status
|
||||||
|
}
|
||||||
|
|
||||||
|
# xterm title
|
||||||
|
PROMPT_XTITLE=$'%{\033]0;%n@%M:%~\007%}'
|
||||||
|
PROMPT="${PROMPT_XTITLE}${PROMPT}"
|
54
config/zsh/components/theme-delta-mod.zsh
Normal file
54
config/zsh/components/theme-delta-mod.zsh
Normal file
|
@ -0,0 +1,54 @@
|
||||||
|
# Delta
|
||||||
|
# Reference/Resources:
|
||||||
|
#
|
||||||
|
# Prompt Expansion:
|
||||||
|
# http://zsh.sourceforge.net/Doc/Release/Prompt-Expansion.html
|
||||||
|
# http://unix.stackexchange.com/questions/157693/howto-include-output-of-a-script-into-the-zsh-prompt
|
||||||
|
#
|
||||||
|
# vcs_info
|
||||||
|
# https://github.com/zsh-users/zsh/blob/master/Misc/vcs_info-examples
|
||||||
|
# http://zsh.sourceforge.net/Doc/Release/User-Contributions.html#Version-Control-Information
|
||||||
|
|
||||||
|
delta_prompt_symbol() {
|
||||||
|
if [[ "$1" -eq 0 ]]; then
|
||||||
|
print -n '%F{red}'
|
||||||
|
else
|
||||||
|
print -n '%F{8}'
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
delta_prompt_init() {
|
||||||
|
|
||||||
|
local hostnamevar PRETTY_HOSTNAME CHASSIS LOCATION
|
||||||
|
if [[ -f /etc/machine-info ]]; then
|
||||||
|
. /etc/machine-info
|
||||||
|
if [[ -n $PRETTY_HOSTNAME ]]; then
|
||||||
|
hostnamevar=$PRETTY_HOSTNAME
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
if [[ -z $hostnamevar ]]; then
|
||||||
|
hostnamevar='%m'
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
if [[ -n $SSH_CONNECTION ]]; then
|
||||||
|
PROMPT=" \$(delta_prompt_symbol \$?)Δ%f %F{8}$hostnamevar %c >%f "
|
||||||
|
else
|
||||||
|
PROMPT=" \$(delta_prompt_symbol \$?)Δ%f %F{8}%c >%f "
|
||||||
|
fi
|
||||||
|
|
||||||
|
zstyle ':vcs_info:*' enable git
|
||||||
|
zstyle ':vcs_info:*' use-simple true
|
||||||
|
zstyle ':vcs_info:git*' formats '%b'
|
||||||
|
zstyle ':vcs_info:git*' actionformats '%b|%a'
|
||||||
|
|
||||||
|
zstyle ':vcs_info:*' max-exports 2
|
||||||
|
}
|
||||||
|
|
||||||
|
delta_prompt_init "$@"
|
||||||
|
|
||||||
|
# xterm title
|
||||||
|
PROMPT_XTITLE=$'%{\033]0;%n@%M:%~\007%}'
|
||||||
|
PROMPT="${PROMPT_XTITLE}${PROMPT}"
|
95
config/zsh/prompt.zsh
Normal file
95
config/zsh/prompt.zsh
Normal file
|
@ -0,0 +1,95 @@
|
||||||
|
# Delta
|
||||||
|
# Reference/Resources:
|
||||||
|
#
|
||||||
|
# Prompt Expansion:
|
||||||
|
# http://zsh.sourceforge.net/Doc/Release/Prompt-Expansion.html
|
||||||
|
# http://unix.stackexchange.com/questions/157693/howto-include-output-of-a-script-into-the-zsh-prompt
|
||||||
|
#
|
||||||
|
# vcs_info
|
||||||
|
# https://github.com/zsh-users/zsh/blob/master/Misc/vcs_info-examples
|
||||||
|
# http://zsh.sourceforge.net/Doc/Release/User-Contributions.html#Version-Control-Information
|
||||||
|
#
|
||||||
|
delta_prompt_symbol() {
|
||||||
|
if [[ "$1" -eq 0 ]]; then
|
||||||
|
print -n "%F{$2}"
|
||||||
|
else
|
||||||
|
print -n '%F{8}'
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
delta_prompt_nix_shell() {
|
||||||
|
if [[ -n "$IN_NIX3_SHELL" || -n "$IN_NIX_SHELL" ]]; then
|
||||||
|
print -n " %F{cyan}>%F{blue}>%F{8}"
|
||||||
|
tr : '\n' <<<$PATH | grep '^/nix/store' | while read storepath; do
|
||||||
|
print -n " ${${storepath#*-}%/*}"
|
||||||
|
done
|
||||||
|
print -n '%f\n '
|
||||||
|
else
|
||||||
|
print -n ' '
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
delta_prompt_init() {
|
||||||
|
|
||||||
|
local hostnamevar PRETTY_HOSTNAME CHASSIS LOCATION
|
||||||
|
if [[ -f /etc/machine-info ]]; then
|
||||||
|
. /etc/machine-info
|
||||||
|
if [[ -n $PRETTY_HOSTNAME ]]; then
|
||||||
|
hostnamevar=$PRETTY_HOSTNAME
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
if [[ -z $hostnamevar ]]; then
|
||||||
|
hostnamevar='%m'
|
||||||
|
fi
|
||||||
|
|
||||||
|
local symbol_color
|
||||||
|
if [[ -n "$IN_NIX3_SHELL" || -n "$IN_NIX_SHELL" ]]; then
|
||||||
|
symbol_color=blue
|
||||||
|
else
|
||||||
|
symbol_color=red
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ -n $SSH_CONNECTION ]]; then
|
||||||
|
PROMPT="$(delta_prompt_nix_shell)\$(delta_prompt_symbol \$? $symbol_color)Δ%f %F{8}$hostnamevar %c >%f "
|
||||||
|
else
|
||||||
|
PROMPT="$(delta_prompt_nix_shell)\$(delta_prompt_symbol \$? $symbol_color)Δ%f %F{8}%c >%f "
|
||||||
|
fi
|
||||||
|
unfunction delta_prompt_nix_shell
|
||||||
|
|
||||||
|
zstyle ':vcs_info:*' enable git
|
||||||
|
zstyle ':vcs_info:*' use-simple true
|
||||||
|
zstyle ':vcs_info:git*' formats '%b'
|
||||||
|
zstyle ':vcs_info:git*' actionformats '%b|%a'
|
||||||
|
|
||||||
|
zstyle ':vcs_info:*' max-exports 2
|
||||||
|
}
|
||||||
|
|
||||||
|
delta_prompt_git_status() {
|
||||||
|
local message=""
|
||||||
|
local message_color="%F{green}"
|
||||||
|
|
||||||
|
# https://git-scm.com/docs/git-status#_short_format
|
||||||
|
local staged=$(git status --porcelain 2>/dev/null | grep -e "^[MADRCU]")
|
||||||
|
local unstaged=$(git status --porcelain 2>/dev/null | grep -e "^[MADRCU? ][MADRCU?]")
|
||||||
|
|
||||||
|
if [[ -n ${staged} ]]; then
|
||||||
|
message_color="%F{red}"
|
||||||
|
elif [[ -n ${unstaged} ]]; then
|
||||||
|
message_color="%F{yellow}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
local branch=$(git rev-parse --abbrev-ref HEAD 2>/dev/null)
|
||||||
|
if [[ -n ${branch} ]]; then
|
||||||
|
message+="${message_color}${branch}%f"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo -n "${message}"
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
delta_prompt_init "$@"
|
||||||
|
|
||||||
|
# xterm title
|
||||||
|
PROMPT_XTITLE=$'%{\033]0;%n@%M:%~\007%}'
|
||||||
|
PROMPT="${PROMPT_XTITLE}${PROMPT}"
|
||||||
|
RPROMPT='$(delta_prompt_git_status)'
|
337
flake.lock
Normal file
337
flake.lock
Normal file
|
@ -0,0 +1,337 @@
|
||||||
|
{
|
||||||
|
"nodes": {
|
||||||
|
"agenix": {
|
||||||
|
"inputs": {
|
||||||
|
"nixpkgs": [
|
||||||
|
"nixpkgs"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1641576265,
|
||||||
|
"narHash": "sha256-G4W39k5hdu2kS13pi/RhyTOySAo7rmrs7yMUZRH0OZI=",
|
||||||
|
"owner": "ryantm",
|
||||||
|
"repo": "agenix",
|
||||||
|
"rev": "08b9c96878b2f9974fc8bde048273265ad632357",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "ryantm",
|
||||||
|
"repo": "agenix",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"deploy-rs": {
|
||||||
|
"inputs": {
|
||||||
|
"flake-compat": "flake-compat",
|
||||||
|
"nixpkgs": [
|
||||||
|
"nixpkgs"
|
||||||
|
],
|
||||||
|
"utils": "utils"
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1643452512,
|
||||||
|
"narHash": "sha256-X+ZZhxzSSI0UyNVbVn3YH53Iiai0cUPZLq2ls751z4I=",
|
||||||
|
"owner": "serokell",
|
||||||
|
"repo": "deploy-rs",
|
||||||
|
"rev": "3180b55ad44777edd90c08f9f9d4df74ec1549b9",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "serokell",
|
||||||
|
"repo": "deploy-rs",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"flake-compat": {
|
||||||
|
"flake": false,
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1627913399,
|
||||||
|
"narHash": "sha256-hY8g6H2KFL8ownSiFeMOjwPC8P0ueXpCVEbxgda3pko=",
|
||||||
|
"owner": "edolstra",
|
||||||
|
"repo": "flake-compat",
|
||||||
|
"rev": "12c64ca55c1014cdc1b16ed5a804aa8576601ff2",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "edolstra",
|
||||||
|
"repo": "flake-compat",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"flake-utils": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1629481132,
|
||||||
|
"narHash": "sha256-JHgasjPR0/J1J3DRm4KxM4zTyAj4IOJY8vIl75v/kPI=",
|
||||||
|
"owner": "numtide",
|
||||||
|
"repo": "flake-utils",
|
||||||
|
"rev": "997f7efcb746a9c140ce1f13c72263189225f482",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "numtide",
|
||||||
|
"repo": "flake-utils",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"home-manager": {
|
||||||
|
"inputs": {
|
||||||
|
"nixpkgs": [
|
||||||
|
"nixpkgs"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1643579427,
|
||||||
|
"narHash": "sha256-tV4M4+Aqd/3ZjEz1Q07j89KIlkt1oFH34RzpBkUeO/0=",
|
||||||
|
"owner": "nix-community",
|
||||||
|
"repo": "home-manager",
|
||||||
|
"rev": "a52aed72c84a2a10102a92397339fa01fc0fe9cf",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "nix-community",
|
||||||
|
"ref": "master",
|
||||||
|
"repo": "home-manager",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"kernel-clr": {
|
||||||
|
"flake": false,
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1643572264,
|
||||||
|
"narHash": "sha256-qFQw0oGwBCQ+VVAYG6DuaVvEr6P/5ISjdkfQyMySOpc=",
|
||||||
|
"owner": "clearlinux-pkgs",
|
||||||
|
"repo": "linux",
|
||||||
|
"rev": "408f197e221f6b4b9c2c65fee7029365b1bf50b1",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "clearlinux-pkgs",
|
||||||
|
"repo": "linux",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"lowdown-src": {
|
||||||
|
"flake": false,
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1633514407,
|
||||||
|
"narHash": "sha256-Dw32tiMjdK9t3ETl5fzGrutQTzh2rufgZV4A/BbxuD4=",
|
||||||
|
"owner": "kristapsdz",
|
||||||
|
"repo": "lowdown",
|
||||||
|
"rev": "d2c2b44ff6c27b936ec27358a2653caaef8f73b8",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "kristapsdz",
|
||||||
|
"repo": "lowdown",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"modular-nvim": {
|
||||||
|
"inputs": {
|
||||||
|
"neovim-nightly": "neovim-nightly",
|
||||||
|
"nixpkgs": [
|
||||||
|
"nixpkgs"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1638630126,
|
||||||
|
"narHash": "sha256-zKGvpL4sdO9vku1hxxojgpIV6VPFttMJCOIzTUN8ghU=",
|
||||||
|
"ref": "master",
|
||||||
|
"rev": "3517ef35fd6e5438044fcf028930d59b6f914c09",
|
||||||
|
"revCount": 3,
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://git.privatevoid.net/max/modular-neovim-prototype"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://git.privatevoid.net/max/modular-neovim-prototype"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"naersk": {
|
||||||
|
"inputs": {
|
||||||
|
"nixpkgs": [
|
||||||
|
"nixpkgs"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1639947939,
|
||||||
|
"narHash": "sha256-pGsM8haJadVP80GFq4xhnSpNitYNQpaXk4cnA796Cso=",
|
||||||
|
"owner": "nmattia",
|
||||||
|
"repo": "naersk",
|
||||||
|
"rev": "2fc8ce9d3c025d59fee349c1f80be9785049d653",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "nmattia",
|
||||||
|
"ref": "master",
|
||||||
|
"repo": "naersk",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"neovim-nightly": {
|
||||||
|
"inputs": {
|
||||||
|
"flake-utils": "flake-utils",
|
||||||
|
"nixpkgs": [
|
||||||
|
"modular-nvim",
|
||||||
|
"nixpkgs"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"dir": "contrib",
|
||||||
|
"lastModified": 1638617502,
|
||||||
|
"narHash": "sha256-+ljeNkTqpLbZlAfRMcOqcB87FAitVKQqHuBblOewRe8=",
|
||||||
|
"owner": "neovim",
|
||||||
|
"repo": "neovim",
|
||||||
|
"rev": "76af219e3e481222e6fece34c7c022d6a58998e1",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"dir": "contrib",
|
||||||
|
"owner": "neovim",
|
||||||
|
"repo": "neovim",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"nix-crx": {
|
||||||
|
"inputs": {
|
||||||
|
"nixpkgs": [
|
||||||
|
"nixpkgs"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1643691840,
|
||||||
|
"narHash": "sha256-uxRMCcS7uauO5w1arF48obliKJrS4VTx0Q1NG7AT6fo=",
|
||||||
|
"ref": "master",
|
||||||
|
"rev": "e5337b96c318c277bc169bdbf59e09aa5973b5a2",
|
||||||
|
"revCount": 71,
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://git.privatevoid.net/max/nix-crx"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://git.privatevoid.net/max/nix-crx"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"nix-super": {
|
||||||
|
"inputs": {
|
||||||
|
"nix": [
|
||||||
|
"nix-super-unstable-repin"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1643493331,
|
||||||
|
"narHash": "sha256-FEgmdOwBc+zRXzOPziUPhzwnGS+XD654tzzuoC7uZWQ=",
|
||||||
|
"ref": "master",
|
||||||
|
"rev": "c5e63d97363a4d911f2957b90e1c7a2a5f4db9c5",
|
||||||
|
"revCount": 42,
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://git.privatevoid.net/max/nix-super"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://git.privatevoid.net/max/nix-super"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"nix-super-unstable-repin": {
|
||||||
|
"inputs": {
|
||||||
|
"lowdown-src": "lowdown-src",
|
||||||
|
"nixpkgs": [
|
||||||
|
"nixpkgs"
|
||||||
|
],
|
||||||
|
"nixpkgs-regression": "nixpkgs-regression"
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1643708659,
|
||||||
|
"narHash": "sha256-RSSlepExjV0T0kCDuDhKymwnajWwq2I372/x71ScI08=",
|
||||||
|
"owner": "NixOS",
|
||||||
|
"repo": "nix",
|
||||||
|
"rev": "73d5f38a47e7c3dea62994cfb8f962976194f767",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "NixOS",
|
||||||
|
"repo": "nix",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"nixos-hardware": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1641965797,
|
||||||
|
"narHash": "sha256-AfxfIzAZbt9aAzpVBn0Bwhd/M4Wix7G91kEjm9H6FPo=",
|
||||||
|
"owner": "NixOS",
|
||||||
|
"repo": "nixos-hardware",
|
||||||
|
"rev": "87a35a0d58f546dc23f37b4f6af575d0e4be6a7a",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "NixOS",
|
||||||
|
"ref": "master",
|
||||||
|
"repo": "nixos-hardware",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"nixpkgs": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1643524588,
|
||||||
|
"narHash": "sha256-Qh5AazxdOQRORbGkkvpKoovDl6ej/4PhDabFsqnueqw=",
|
||||||
|
"owner": "NixOS",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"rev": "efeefb2af1469a5d1f0ae7ca8f0dfd9bb87d5cfb",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "NixOS",
|
||||||
|
"ref": "nixos-unstable",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"nixpkgs-regression": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1643052045,
|
||||||
|
"narHash": "sha256-uGJ0VXIhWKGXxkeNnq4TvV3CIOkUJ3PAoLZ3HMzNVMw=",
|
||||||
|
"owner": "NixOS",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"rev": "215d4d0fd80ca5163643b03a33fde804a29cc1e2",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"id": "nixpkgs",
|
||||||
|
"rev": "215d4d0fd80ca5163643b03a33fde804a29cc1e2",
|
||||||
|
"type": "indirect"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"root": {
|
||||||
|
"inputs": {
|
||||||
|
"agenix": "agenix",
|
||||||
|
"deploy-rs": "deploy-rs",
|
||||||
|
"home-manager": "home-manager",
|
||||||
|
"kernel-clr": "kernel-clr",
|
||||||
|
"modular-nvim": "modular-nvim",
|
||||||
|
"naersk": "naersk",
|
||||||
|
"nix-crx": "nix-crx",
|
||||||
|
"nix-super": "nix-super",
|
||||||
|
"nix-super-unstable-repin": "nix-super-unstable-repin",
|
||||||
|
"nixos-hardware": "nixos-hardware",
|
||||||
|
"nixpkgs": "nixpkgs"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"utils": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1631561581,
|
||||||
|
"narHash": "sha256-3VQMV5zvxaVLvqqUrNz3iJelLw30mIVSfZmAaauM3dA=",
|
||||||
|
"owner": "numtide",
|
||||||
|
"repo": "flake-utils",
|
||||||
|
"rev": "7e5bf3925f6fbdfaf50a2a7ca0be2879c4261d19",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "numtide",
|
||||||
|
"repo": "flake-utils",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"root": "root",
|
||||||
|
"version": 7
|
||||||
|
}
|
105
flake.nix
Normal file
105
flake.nix
Normal file
|
@ -0,0 +1,105 @@
|
||||||
|
{
|
||||||
|
description = "System and user config";
|
||||||
|
|
||||||
|
inputs = {
|
||||||
|
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
|
||||||
|
|
||||||
|
nix-super.url = "git+https://git.privatevoid.net/max/nix-super";
|
||||||
|
nix-super.inputs.nix.follows = "nix-super-unstable-repin";
|
||||||
|
|
||||||
|
nix-super-unstable-repin.url = "github:NixOS/nix";
|
||||||
|
nix-super-unstable-repin.inputs.nixpkgs.follows = "nixpkgs";
|
||||||
|
|
||||||
|
modular-nvim.url = "git+https://git.privatevoid.net/max/modular-neovim-prototype";
|
||||||
|
modular-nvim.inputs.nixpkgs.follows = "nixpkgs";
|
||||||
|
|
||||||
|
home-manager.url = "github:nix-community/home-manager/master";
|
||||||
|
home-manager.inputs.nixpkgs.follows = "nixpkgs";
|
||||||
|
|
||||||
|
nixos-hardware.url = "github:NixOS/nixos-hardware/master";
|
||||||
|
|
||||||
|
nix-crx.url = "git+https://git.privatevoid.net/max/nix-crx";
|
||||||
|
nix-crx.inputs.nixpkgs.follows = "nixpkgs";
|
||||||
|
|
||||||
|
deploy-rs.url = "github:serokell/deploy-rs";
|
||||||
|
deploy-rs.inputs.nixpkgs.follows = "nixpkgs";
|
||||||
|
deploy-rs.inputs.naersk.follows = "naersk";
|
||||||
|
|
||||||
|
# re-pin naersk to fix deprecation warning in deploy-rs
|
||||||
|
naersk.url = "github:nmattia/naersk/master";
|
||||||
|
naersk.inputs.nixpkgs.follows = "nixpkgs";
|
||||||
|
|
||||||
|
agenix.url = "github:ryantm/agenix";
|
||||||
|
agenix.inputs.nixpkgs.follows = "nixpkgs";
|
||||||
|
|
||||||
|
kernel-clr = { url = "github:clearlinux-pkgs/linux"; flake = false; };
|
||||||
|
};
|
||||||
|
outputs = { self, nixpkgs, home-manager, nixos-hardware, ... }@inputs:
|
||||||
|
let
|
||||||
|
inherit (nixpkgs) lib;
|
||||||
|
system = "x86_64-linux";
|
||||||
|
pkgs = import nixpkgs {
|
||||||
|
inherit system;
|
||||||
|
};
|
||||||
|
|
||||||
|
deploy-rs-lib = inputs.deploy-rs.lib.${system};
|
||||||
|
agenixModule = inputs.agenix.nixosModules.age;
|
||||||
|
|
||||||
|
aspect = import ./modules inputs;
|
||||||
|
hosts = import ./hosts;
|
||||||
|
specialArgs = { inherit inputs hosts aspect; };
|
||||||
|
|
||||||
|
mkNixOS' = lib: name: lib.nixosSystem {
|
||||||
|
inherit system;
|
||||||
|
inherit specialArgs;
|
||||||
|
modules = [ hosts."${name}".nixos ];
|
||||||
|
};
|
||||||
|
mkNixOS = mkNixOS' nixpkgs.lib;
|
||||||
|
in {
|
||||||
|
nixosModules = aspect.modules;
|
||||||
|
nixosConfigurations =
|
||||||
|
lib.genAttrs [ "TITAN" "jericho" ] mkNixOS;
|
||||||
|
|
||||||
|
deploy.nodes = with deploy-rs-lib; {
|
||||||
|
TITAN = {
|
||||||
|
hostname = "titan.hypr";
|
||||||
|
profiles.system = {
|
||||||
|
user = "root";
|
||||||
|
path = activate.nixos self.nixosConfigurations.TITAN;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
jericho = {
|
||||||
|
hostname = "jericho.hypr";
|
||||||
|
profiles.system = {
|
||||||
|
user = "root";
|
||||||
|
path = activate.nixos self.nixosConfigurations.jericho;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
packages.${system} = import ./packages {
|
||||||
|
nixpkgs = pkgs;
|
||||||
|
inherit inputs;
|
||||||
|
};
|
||||||
|
|
||||||
|
defaultApp.${system} = {
|
||||||
|
type = "app";
|
||||||
|
program = self.packages.${system}.flake-installer.outPath;
|
||||||
|
};
|
||||||
|
|
||||||
|
hydraJobs = {
|
||||||
|
systems.${system} = lib.mapAttrs (_: x: x.config.system.build.toplevel) self.nixosConfigurations;
|
||||||
|
packages = self.packages;
|
||||||
|
};
|
||||||
|
|
||||||
|
homeConfigurations = {
|
||||||
|
max = inputs.home-manager.lib.homeManagerConfiguration {
|
||||||
|
inherit system;
|
||||||
|
homeDirectory = "/home/max";
|
||||||
|
username = "max";
|
||||||
|
configuration.imports = [ ./users/max/home.nix ];
|
||||||
|
extraSpecialArgs = { inherit inputs; };
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
14
hosts/TITAN/default.nix
Normal file
14
hosts/TITAN/default.nix
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
tools: {
|
||||||
|
ssh.id = with tools.dns; {
|
||||||
|
publicKey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAINH29WYsq4VNhx10Ms7WYQSNkPKknfK/JnHSQUf+RjlT";
|
||||||
|
extraHostNames = clientResolve "titan";
|
||||||
|
};
|
||||||
|
|
||||||
|
hypr = {
|
||||||
|
id = "QmfJ5Tv2z9jFv9Aocevyn6QqRcfm9eYQZhvYvmAVfACfuM";
|
||||||
|
addr = "10.100.3.7";
|
||||||
|
listenPort = 443;
|
||||||
|
};
|
||||||
|
|
||||||
|
nixos = import ./system.nix;
|
||||||
|
}
|
21
hosts/TITAN/extras/cachix-upload-daemon.nix
Normal file
21
hosts/TITAN/extras/cachix-upload-daemon.nix
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
{ config, pkgs, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
age.secrets.cachix-upload-key = {
|
||||||
|
file = ../../../secrets/cachix-upload-key.age;
|
||||||
|
mode = "0400";
|
||||||
|
};
|
||||||
|
|
||||||
|
systemd.services.cachix-upload = {
|
||||||
|
description = "Cachix Uploader";
|
||||||
|
wantedBy = [ "multi-user.target" ];
|
||||||
|
after = [ "network-online.target" ];
|
||||||
|
path = [ config.nix.package ];
|
||||||
|
serviceConfig = {
|
||||||
|
ExecStart = "${pkgs.cachix}/bin/cachix watch-store max";
|
||||||
|
Restart = "always";
|
||||||
|
DynamicUser = true;
|
||||||
|
EnvironmentFile = config.age.secrets.cachix-upload-key.path;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
14
hosts/TITAN/extras/ddcci-backlight.nix
Normal file
14
hosts/TITAN/extras/ddcci-backlight.nix
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
{ config, pkgs, ... }:
|
||||||
|
{
|
||||||
|
systemd.targets.ddcci-backlight = rec {
|
||||||
|
before = [ "modprobe@ddcci.service" "modprobe@ddcci-backlight.service" ];
|
||||||
|
wants = before;
|
||||||
|
};
|
||||||
|
|
||||||
|
systemd.services.display-manager.wants = [ "ddcci-backlight.target" ];
|
||||||
|
|
||||||
|
boot.extraModulePackages = [ (pkgs.ddcci-driver-with-global-control.override {
|
||||||
|
inherit (config.boot.kernelPackages) kernel;
|
||||||
|
})
|
||||||
|
];
|
||||||
|
}
|
74
hosts/TITAN/extras/fbi-downloader.nix
Normal file
74
hosts/TITAN/extras/fbi-downloader.nix
Normal file
|
@ -0,0 +1,74 @@
|
||||||
|
{ config, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
age.secrets = {
|
||||||
|
transmission-rpc-password = {
|
||||||
|
file = ../../../secrets/transmission-rpc-password.age;
|
||||||
|
mode = "0400";
|
||||||
|
};
|
||||||
|
wireguard-key-upload = {
|
||||||
|
file = ../../../secrets/wireguard-key-upload.age;
|
||||||
|
mode = "0400";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
users.groups.mediamanagers = {
|
||||||
|
gid = 646000020;
|
||||||
|
members = [ "transmission" "lidarr" ];
|
||||||
|
};
|
||||||
|
services.lidarr.group = "mediamanagers";
|
||||||
|
services.transmission = {
|
||||||
|
enable = true;
|
||||||
|
group = "mediamanagers";
|
||||||
|
settings = {
|
||||||
|
download-dir = "/srv/data/DOWNLOAD";
|
||||||
|
incomplete-dir = "/srv/data/DOWNLOAD/.incomplete";
|
||||||
|
|
||||||
|
# being a leech
|
||||||
|
speed-limit-up = 20;
|
||||||
|
ratio-limit = 0.01;
|
||||||
|
idle-seeding-limit = 1;
|
||||||
|
speed-limit-up-enabled = true;
|
||||||
|
ratio-limit-enabled = true;
|
||||||
|
idle-seeding-limit-enabled = true;
|
||||||
|
|
||||||
|
utp-enabled = false;
|
||||||
|
rpc-bind-address = "0.0.0.0";
|
||||||
|
rpc-whitelist = "127.0.0.1,::1,10.100.0.1,10.100.0.*,10.100.1.*,10.100.3.*";
|
||||||
|
rpc-authentication-required = true;
|
||||||
|
};
|
||||||
|
credentialsFile = config.age.secrets.transmission-rpc-password.path;
|
||||||
|
};
|
||||||
|
systemd.services.transmission = {
|
||||||
|
after = [ "mnt-media\\x2duploads.mount" ];
|
||||||
|
unitConfig = {
|
||||||
|
RequiresMountsFor = [ "/mnt/media-uploads" ];
|
||||||
|
};
|
||||||
|
serviceConfig = {
|
||||||
|
BindPaths = [ "/mnt/media-uploads" ];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
networking.firewall.interfaces.tungsten.allowedTCPPorts = [ 9091 ];
|
||||||
|
networking.wireguard = {
|
||||||
|
enable = true;
|
||||||
|
interfaces.wgupload = {
|
||||||
|
ips = [ "10.150.0.2/24" ];
|
||||||
|
privateKeyFile = config.age.secrets.wireguard-key-upload.path;
|
||||||
|
allowedIPsAsRoutes = true;
|
||||||
|
peers = [
|
||||||
|
{
|
||||||
|
publicKey = "apKXnlMtcOe8WqCVXJAXEjzppN+qTmESlt0NjMTaclQ=";
|
||||||
|
allowedIPs = [ "10.150.0.0/24" ];
|
||||||
|
endpoint = "116.202.226.86:6969";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
fileSystems."/mnt/media-uploads" = {
|
||||||
|
device = "10.150.0.254:/mnt/storage/media/media/uploads";
|
||||||
|
fsType = "nfs4";
|
||||||
|
noCheck = true;
|
||||||
|
options = [ "rsize=1024" "wsize=1024" "x-systemd.after=wireguard-wgupload.service" "x-systemd.mount-timeout=10s" ];
|
||||||
|
};
|
||||||
|
}
|
52
hosts/TITAN/hardware-configuration.nix
Normal file
52
hosts/TITAN/hardware-configuration.nix
Normal file
|
@ -0,0 +1,52 @@
|
||||||
|
# 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"
|
||||||
|
"nvme"
|
||||||
|
"ahci"
|
||||||
|
"usbhid"
|
||||||
|
"sd_mod"
|
||||||
|
"sr_mod"
|
||||||
|
];
|
||||||
|
boot.initrd.kernelModules = [ ];
|
||||||
|
boot.kernelModules = [ "kvm-amd" ];
|
||||||
|
boot.extraModulePackages = [ ];
|
||||||
|
|
||||||
|
fileSystems."/" = {
|
||||||
|
device = "tmprootfs";
|
||||||
|
fsType = "tmpfs";
|
||||||
|
options = [ "defaults" "size=2G" "mode=755" ];
|
||||||
|
};
|
||||||
|
|
||||||
|
fileSystems."/persist" = {
|
||||||
|
device = "/dev/disk/by-partlabel/persist";
|
||||||
|
fsType = "xfs";
|
||||||
|
neededForBoot = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
fileSystems."/srv/data" = {
|
||||||
|
device = "/dev/disk/by-label/butter";
|
||||||
|
fsType = "btrfs";
|
||||||
|
};
|
||||||
|
|
||||||
|
fileSystems."/nix" = {
|
||||||
|
device = "/dev/disk/by-partlabel/nixstore";
|
||||||
|
fsType = "xfs";
|
||||||
|
};
|
||||||
|
|
||||||
|
fileSystems."/boot" = {
|
||||||
|
device = "/dev/disk/by-partlabel/ESP";
|
||||||
|
fsType = "vfat";
|
||||||
|
};
|
||||||
|
|
||||||
|
fileSystems."/home" = {
|
||||||
|
device = "/dev/disk/by-partlabel/home";
|
||||||
|
fsType = "xfs";
|
||||||
|
};
|
||||||
|
}
|
54
hosts/TITAN/system.nix
Normal file
54
hosts/TITAN/system.nix
Normal file
|
@ -0,0 +1,54 @@
|
||||||
|
{ config, pkgs, aspect, inputs, hosts, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
|
||||||
|
imports = [
|
||||||
|
./hardware-configuration.nix
|
||||||
|
./extras/cachix-upload-daemon.nix
|
||||||
|
./extras/ddcci-backlight.nix
|
||||||
|
./extras/fbi-downloader.nix
|
||||||
|
(import ../../users "desktop").users.max
|
||||||
|
inputs.agenix.nixosModules.age
|
||||||
|
]
|
||||||
|
++ ( with inputs.nixos-hardware.nixosModules; [
|
||||||
|
common-cpu-amd
|
||||||
|
])
|
||||||
|
++ aspect.sets.desktop
|
||||||
|
++ (with aspect.modules; [
|
||||||
|
persistence
|
||||||
|
nix-builder
|
||||||
|
games
|
||||||
|
lidarr
|
||||||
|
prowlarr
|
||||||
|
]);
|
||||||
|
|
||||||
|
boot.kernelPackages = pkgs.linuxPackages_latest;
|
||||||
|
|
||||||
|
boot.loader.systemd-boot.enable = true;
|
||||||
|
boot.loader.efi.canTouchEfiVariables = true;
|
||||||
|
|
||||||
|
networking.hostName = "TITAN";
|
||||||
|
|
||||||
|
time.timeZone = "Europe/Vienna";
|
||||||
|
|
||||||
|
i18n.defaultLocale = "en_US.UTF-8";
|
||||||
|
console = {
|
||||||
|
font = "";
|
||||||
|
keyMap = "de";
|
||||||
|
};
|
||||||
|
|
||||||
|
services.xserver.layout = "de";
|
||||||
|
|
||||||
|
services.xserver.libinput.enable = true;
|
||||||
|
|
||||||
|
services.openssh.enable = true;
|
||||||
|
|
||||||
|
system.stateVersion = "20.09";
|
||||||
|
|
||||||
|
services.fstrim.enable = true;
|
||||||
|
|
||||||
|
users.mutableUsers = false;
|
||||||
|
|
||||||
|
virtualisation.podman.enable = true;
|
||||||
|
}
|
||||||
|
|
43
hosts/default.nix
Normal file
43
hosts/default.nix
Normal file
|
@ -0,0 +1,43 @@
|
||||||
|
let
|
||||||
|
tools = import ./tools.nix;
|
||||||
|
in with tools.dns; {
|
||||||
|
|
||||||
|
# NixOS machines
|
||||||
|
jericho = import ./jericho tools;
|
||||||
|
TITAN = import ./TITAN tools;
|
||||||
|
|
||||||
|
# Unmanaged machine metadata
|
||||||
|
VEGAS = {
|
||||||
|
ssh.id = {
|
||||||
|
publicKey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAICz2nGA+Y4OxhMKsV6vKIns3hOoBkK557712h7FfWXcE";
|
||||||
|
extraHostNames = subResolve "vegas" "backbone";
|
||||||
|
};
|
||||||
|
hypr = {
|
||||||
|
id = "QmYs4xNBby2fTs8RnzfXEk161KD4mftBfCiR8yXtgGPj4J";
|
||||||
|
addr = "10.100.3.5";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
prophet = {
|
||||||
|
ssh.id = {
|
||||||
|
publicKey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJZ4FyGi69MksEn+UJZ87vw1APqiZmPNlEYIr0CbEoGv";
|
||||||
|
extraHostNames = subResolve "prophet" "node";
|
||||||
|
};
|
||||||
|
hypr = {
|
||||||
|
id = "QmbrAHuh4RYcyN9fWePCZMVmQjbaNXtyvrDCWz4VrchbXh";
|
||||||
|
addr = "10.100.3.9";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
styx = {
|
||||||
|
ssh.id = {
|
||||||
|
publicKey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOYLrmiuPK77cw71QNzG2zaWs6gsxmYuLyqsUrWMYLnk";
|
||||||
|
extraHostNames = subResolve "styx" "services";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
AnimusAlpha = let extraHostNames = [ "alpha.animus.com" "animus.com" ]; in {
|
||||||
|
ssh.id = {
|
||||||
|
publicKey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIGpFR47Ev+W+bdng6IrDVpl8rlKBBHSr1v5lwJmZcEFH";
|
||||||
|
extraHostNames = portMap 69 extraHostNames;
|
||||||
|
};
|
||||||
|
ssh.extraConfig = tools.ssh.extraConfig extraHostNames [ "Port 69" ];
|
||||||
|
};
|
||||||
|
}
|
13
hosts/jericho/default.nix
Normal file
13
hosts/jericho/default.nix
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
tools: {
|
||||||
|
ssh.id = with tools.dns; {
|
||||||
|
publicKey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIGHMvKAtawuD2mrUOLo8ueb+A7q87xmZvXSCX60QO1r7";
|
||||||
|
extraHostNames = clientResolve "jericho";
|
||||||
|
};
|
||||||
|
|
||||||
|
hypr = {
|
||||||
|
id = "QmccBLgGP3HR36tTkwSYZX3KDv2EXb1MvYwGVs6PbpbHv9";
|
||||||
|
addr = "10.100.3.13";
|
||||||
|
};
|
||||||
|
|
||||||
|
nixos = import ./system.nix;
|
||||||
|
}
|
|
@ -0,0 +1,6 @@
|
||||||
|
{
|
||||||
|
boot.kernelPatches = [{
|
||||||
|
patch = ./i915-dp-hdmi-always-full-color.patch;
|
||||||
|
name = "i915-always-full-color";
|
||||||
|
}];
|
||||||
|
}
|
12
hosts/jericho/extras/i915-dp-hdmi-always-full-color.patch
Normal file
12
hosts/jericho/extras/i915-dp-hdmi-always-full-color.patch
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
diff --git a/drivers/gpu/drm/i915/display/intel_dp.c b/drivers/gpu/drm/i915/display/intel_dp.c
|
||||||
|
index a552f05a6..6546b0b6d 100644
|
||||||
|
--- a/drivers/gpu/drm/i915/display/intel_dp.c
|
||||||
|
+++ b/drivers/gpu/drm/i915/display/intel_dp.c
|
||||||
|
@@ -1567,6 +1567,7 @@ bool intel_dp_limited_color_range(const struct intel_crtc_state *crtc_state,
|
||||||
|
* VESA DisplayPort Ver.1.2a - 5.1.1.1 Video Colorimetry
|
||||||
|
*/
|
||||||
|
return crtc_state->pipe_bpp != 18 &&
|
||||||
|
+ (crtc_state->pipe_bpp != 18 && crtc_state->pipe_bpp != 24) &&
|
||||||
|
drm_default_rgb_quant_range(adjusted_mode) ==
|
||||||
|
HDMI_QUANTIZATION_RANGE_LIMITED;
|
||||||
|
} else {
|
27
hosts/jericho/extras/kernel-clr.nix
Normal file
27
hosts/jericho/extras/kernel-clr.nix
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
{ pkgs, inputs, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
boot.kernelPatches = let
|
||||||
|
pickPatch = x: "${inputs.kernel-clr}/${x}";
|
||||||
|
patchFiles = map pickPatch [
|
||||||
|
"0104-pci-pme-wakeups.patch"
|
||||||
|
"0108-smpboot-reuse-timer-calibration.patch"
|
||||||
|
"0110-give-rdrand-some-credit.patch"
|
||||||
|
"0111-ipv4-tcp-allow-the-memory-tuning-for-tcp-to-go-a-lit.patch"
|
||||||
|
"0118-add-scheduler-turbo3-patch.patch"
|
||||||
|
"0119-use-lfence-instead-of-rep-and-nop.patch"
|
||||||
|
"0120-do-accept-in-LIFO-order-for-cache-efficiency.patch"
|
||||||
|
"0121-locking-rwsem-spin-faster.patch"
|
||||||
|
"itmt_epb.patch"
|
||||||
|
"mm-wakeups.patch"
|
||||||
|
"percpu-minsize.patch"
|
||||||
|
"socket.patch"
|
||||||
|
];
|
||||||
|
patches = map builtins.readFile patchFiles;
|
||||||
|
patchSet = builtins.concatStringsSep "\n" patches;
|
||||||
|
patch = pkgs.writeText "kernel-clr-combined.patch" patchSet;
|
||||||
|
in [{
|
||||||
|
inherit patch;
|
||||||
|
name = "Clear Linux* patchset";
|
||||||
|
}];
|
||||||
|
}
|
120
hosts/jericho/extras/thermal-conf.xml
Normal file
120
hosts/jericho/extras/thermal-conf.xml
Normal file
|
@ -0,0 +1,120 @@
|
||||||
|
<?xml version="1.0"?>
|
||||||
|
<!-- BEGIN -->
|
||||||
|
<ThermalConfiguration>
|
||||||
|
<Platform>
|
||||||
|
<Name> Auto generated </Name>
|
||||||
|
<ProductName>XPS 13 7390 2-in-1</ProductName>
|
||||||
|
<Preference>QUIET</Preference>
|
||||||
|
<PPCC>
|
||||||
|
<PowerLimitIndex>0</PowerLimitIndex>
|
||||||
|
<PowerLimitMinimum>6000</PowerLimitMinimum>
|
||||||
|
<PowerLimitMaximum>25000</PowerLimitMaximum>
|
||||||
|
<TimeWindowMinimum>28000</TimeWindowMinimum>
|
||||||
|
<TimeWindowMaximum>28000</TimeWindowMaximum>
|
||||||
|
<StepSize>250</StepSize>
|
||||||
|
</PPCC>
|
||||||
|
<ThermalZones>
|
||||||
|
<ThermalZone>
|
||||||
|
<Type>auto_zone_0</Type>
|
||||||
|
<TripPoints>
|
||||||
|
<TripPoint>
|
||||||
|
<SensorType>TMEM</SensorType>
|
||||||
|
<Temperature>75000</Temperature>
|
||||||
|
<Type>Passive</Type>
|
||||||
|
<CoolingDevice>
|
||||||
|
<Type>B0D4</Type>
|
||||||
|
<SamplingPeriod>5</SamplingPeriod>
|
||||||
|
</CoolingDevice>
|
||||||
|
</TripPoint>
|
||||||
|
</TripPoints>
|
||||||
|
</ThermalZone>
|
||||||
|
<ThermalZone>
|
||||||
|
<Type>auto_zone_1</Type>
|
||||||
|
<TripPoints>
|
||||||
|
<TripPoint>
|
||||||
|
<SensorType>TSKN</SensorType>
|
||||||
|
<Temperature>60000</Temperature>
|
||||||
|
<Type>Passive</Type>
|
||||||
|
<CoolingDevice>
|
||||||
|
<Type>B0D4</Type>
|
||||||
|
<SamplingPeriod>0</SamplingPeriod>
|
||||||
|
<TargetState>2147483647</TargetState>
|
||||||
|
</CoolingDevice>
|
||||||
|
</TripPoint>
|
||||||
|
<TripPoint>
|
||||||
|
<SensorType>TSKN</SensorType>
|
||||||
|
<Temperature>63000</Temperature>
|
||||||
|
<Type>Passive</Type>
|
||||||
|
<CoolingDevice>
|
||||||
|
<Type>B0D4</Type>
|
||||||
|
<SamplingPeriod>5</SamplingPeriod>
|
||||||
|
<TargetState>13000000</TargetState>
|
||||||
|
</CoolingDevice>
|
||||||
|
</TripPoint>
|
||||||
|
<TripPoint>
|
||||||
|
<SensorType>TSKN</SensorType>
|
||||||
|
<Temperature>65000</Temperature>
|
||||||
|
<Type>Passive</Type>
|
||||||
|
<CoolingDevice>
|
||||||
|
<Type>B0D4</Type>
|
||||||
|
<SamplingPeriod>5</SamplingPeriod>
|
||||||
|
<TargetState>13000000</TargetState>
|
||||||
|
</CoolingDevice>
|
||||||
|
</TripPoint>
|
||||||
|
<TripPoint>
|
||||||
|
<SensorType>TSKN</SensorType>
|
||||||
|
<Temperature>68000</Temperature>
|
||||||
|
<Type>Passive</Type>
|
||||||
|
<CoolingDevice>
|
||||||
|
<Type>B0D4</Type>
|
||||||
|
<SamplingPeriod>5</SamplingPeriod>
|
||||||
|
</CoolingDevice>
|
||||||
|
</TripPoint>
|
||||||
|
</TripPoints>
|
||||||
|
</ThermalZone>
|
||||||
|
<ThermalZone>
|
||||||
|
<Type>auto_zone_2</Type>
|
||||||
|
<TripPoints>
|
||||||
|
<TripPoint>
|
||||||
|
<SensorType>NGFF</SensorType>
|
||||||
|
<Temperature>75000</Temperature>
|
||||||
|
<Type>Passive</Type>
|
||||||
|
<CoolingDevice>
|
||||||
|
<Type>B0D4</Type>
|
||||||
|
<SamplingPeriod>5</SamplingPeriod>
|
||||||
|
</CoolingDevice>
|
||||||
|
</TripPoint>
|
||||||
|
</TripPoints>
|
||||||
|
</ThermalZone>
|
||||||
|
<ThermalZone>
|
||||||
|
<Type>auto_zone_3</Type>
|
||||||
|
<TripPoints>
|
||||||
|
<TripPoint>
|
||||||
|
<SensorType>CHRG</SensorType>
|
||||||
|
<Temperature>75000</Temperature>
|
||||||
|
<Type>Passive</Type>
|
||||||
|
<CoolingDevice>
|
||||||
|
<Type>B0D4</Type>
|
||||||
|
<SamplingPeriod>2</SamplingPeriod>
|
||||||
|
</CoolingDevice>
|
||||||
|
</TripPoint>
|
||||||
|
</TripPoints>
|
||||||
|
</ThermalZone>
|
||||||
|
<ThermalZone>
|
||||||
|
<Type>auto_zone_4</Type>
|
||||||
|
<TripPoints>
|
||||||
|
<TripPoint>
|
||||||
|
<SensorType>WRLS</SensorType>
|
||||||
|
<Temperature>75000</Temperature>
|
||||||
|
<Type>Passive</Type>
|
||||||
|
<CoolingDevice>
|
||||||
|
<Type>B0D4</Type>
|
||||||
|
<SamplingPeriod>5</SamplingPeriod>
|
||||||
|
</CoolingDevice>
|
||||||
|
</TripPoint>
|
||||||
|
</TripPoints>
|
||||||
|
</ThermalZone>
|
||||||
|
</ThermalZones>
|
||||||
|
</Platform>
|
||||||
|
</ThermalConfiguration>
|
||||||
|
<!-- END -->
|
9
hosts/jericho/extras/thermal.nix
Normal file
9
hosts/jericho/extras/thermal.nix
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
{
|
||||||
|
services.thermald.configFile = ./thermal-conf.xml;
|
||||||
|
services.undervolt = {
|
||||||
|
enable = true;
|
||||||
|
coreOffset = -50;
|
||||||
|
gpuOffset = -50;
|
||||||
|
analogioOffset = -50;
|
||||||
|
};
|
||||||
|
}
|
33
hosts/jericho/hardware-configuration.nix
Normal file
33
hosts/jericho/hardware-configuration.nix
Normal file
|
@ -0,0 +1,33 @@
|
||||||
|
{ config, lib, pkgs, modulesPath, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
imports = [ (modulesPath + "/installer/scan/not-detected.nix") ];
|
||||||
|
|
||||||
|
boot.initrd.availableKernelModules = [ "xhci_pci" "nvme" "rtsx_pci_sdmmc" ];
|
||||||
|
boot.initrd.kernelModules = [ ];
|
||||||
|
boot.kernelModules = [ "kvm-intel" ];
|
||||||
|
boot.extraModulePackages = [ ];
|
||||||
|
|
||||||
|
fileSystems."/" = {
|
||||||
|
device = "/dev/disk/by-partlabel/rootfs";
|
||||||
|
fsType = "xfs";
|
||||||
|
};
|
||||||
|
|
||||||
|
fileSystems."/boot" = {
|
||||||
|
device = "/dev/disk/by-partlabel/ESP";
|
||||||
|
fsType = "vfat";
|
||||||
|
};
|
||||||
|
|
||||||
|
fileSystems."/home" = {
|
||||||
|
device = "/dev/disk/by-partlabel/home";
|
||||||
|
fsType = "xfs";
|
||||||
|
};
|
||||||
|
|
||||||
|
fileSystems."/srv/data" = {
|
||||||
|
device = "/dev/disk/by-partlabel/data";
|
||||||
|
fsType = "xfs";
|
||||||
|
};
|
||||||
|
|
||||||
|
powerManagement.cpuFreqGovernor = lib.mkDefault "powersave";
|
||||||
|
hardware.sensor.iio.enable = true;
|
||||||
|
}
|
43
hosts/jericho/system.nix
Normal file
43
hosts/jericho/system.nix
Normal file
|
@ -0,0 +1,43 @@
|
||||||
|
{ config, pkgs, aspect, inputs, hosts, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
imports = [
|
||||||
|
./hardware-configuration.nix
|
||||||
|
./extras/i915-dp-hdmi-always-full-color-patch.nix
|
||||||
|
./extras/kernel-clr.nix
|
||||||
|
./extras/thermal.nix
|
||||||
|
(import ../../users "desktop").users.max
|
||||||
|
inputs.nixos-hardware.nixosModules.dell-xps-13-7390
|
||||||
|
inputs.agenix.nixosModules.age
|
||||||
|
]
|
||||||
|
++ aspect.sets.laptop
|
||||||
|
++ (with aspect.modules; [ games ]);
|
||||||
|
|
||||||
|
boot.kernelPackages = pkgs.linuxPackages_latest;
|
||||||
|
|
||||||
|
boot.loader.systemd-boot.enable = true;
|
||||||
|
boot.loader.efi.canTouchEfiVariables = true;
|
||||||
|
|
||||||
|
networking.hostName = "jericho";
|
||||||
|
|
||||||
|
time.timeZone = "Europe/Vienna";
|
||||||
|
|
||||||
|
i18n.defaultLocale = "en_US.UTF-8";
|
||||||
|
console = {
|
||||||
|
font = "";
|
||||||
|
keyMap = "us";
|
||||||
|
};
|
||||||
|
|
||||||
|
services.xserver.layout = "us";
|
||||||
|
|
||||||
|
services.xserver.libinput.enable = true;
|
||||||
|
|
||||||
|
services.openssh.enable = true;
|
||||||
|
|
||||||
|
system.stateVersion = "20.09";
|
||||||
|
|
||||||
|
services.fstrim.enable = true;
|
||||||
|
|
||||||
|
services.ipfs.dataDir = "/srv/data/ipfs";
|
||||||
|
}
|
||||||
|
|
32
hosts/tools.nix
Normal file
32
hosts/tools.nix
Normal file
|
@ -0,0 +1,32 @@
|
||||||
|
{
|
||||||
|
dns = rec {
|
||||||
|
findSvc = name: [
|
||||||
|
"any.${name}"
|
||||||
|
"local.${name}"
|
||||||
|
"tunnel.${name}"
|
||||||
|
"wired.${name}"
|
||||||
|
"wireless.${name}"
|
||||||
|
"*.if.${name}"
|
||||||
|
];
|
||||||
|
findResolve = list: dnameResolve (append "find" list) ++ append "f.void" list;
|
||||||
|
dnameResolve = list: append "private.void" list ++ append "privatevoid.net" list;
|
||||||
|
vpnResolve = list: dnameResolve (append "vpn" list) ++ (append "hypr" list);
|
||||||
|
llmnrResolve = append "local";
|
||||||
|
append = part: map (x: "${x}.${part}");
|
||||||
|
portMap = port: map (x: "[${x}]:${builtins.toString port}");
|
||||||
|
as = x: [x];
|
||||||
|
|
||||||
|
clientResolve = x: [x] ++
|
||||||
|
findResolve (findSvc x) ++
|
||||||
|
vpnResolve [x] ++
|
||||||
|
llmnrResolve [x];
|
||||||
|
|
||||||
|
subResolve = name: sub: [name] ++ dnameResolve ["${name}.${sub}"];
|
||||||
|
};
|
||||||
|
ssh = {
|
||||||
|
extraConfig = patterns: config: with builtins; let
|
||||||
|
match = "Host ${concatStringsSep " " patterns}";
|
||||||
|
indent = map (x: " " + x) config;
|
||||||
|
in concatStringsSep "\n" ([match] ++ indent);
|
||||||
|
};
|
||||||
|
}
|
50
modules/autopatch/default.nix
Normal file
50
modules/autopatch/default.nix
Normal file
|
@ -0,0 +1,50 @@
|
||||||
|
{ pkgs, lib, config, ... }:
|
||||||
|
{
|
||||||
|
nixpkgs.overlays = [
|
||||||
|
(self: super:
|
||||||
|
(let
|
||||||
|
patched = import ../../packages/patched-derivations.nix super;
|
||||||
|
in {
|
||||||
|
|
||||||
|
inherit (patched)
|
||||||
|
ddcci-driver-with-global-control
|
||||||
|
kooha
|
||||||
|
nerdfonts-terminus
|
||||||
|
oni2
|
||||||
|
terminus_font_fancy
|
||||||
|
webkitgtk
|
||||||
|
;
|
||||||
|
|
||||||
|
doas = patched.doas-interactive;
|
||||||
|
|
||||||
|
ipfs = patched.lain-ipfs;
|
||||||
|
|
||||||
|
hydra-unstable = patched.hydra;
|
||||||
|
|
||||||
|
nix-direnv = super.nix-direnv.override {
|
||||||
|
nix = config.nix.package;
|
||||||
|
};
|
||||||
|
|
||||||
|
} // lib.optionalAttrs config.krb5.enable {
|
||||||
|
|
||||||
|
bind = patched.kerberized-bind;
|
||||||
|
dnsutils = patched.kerberized-dnsutils;
|
||||||
|
dig = patched.kerberized-dig;
|
||||||
|
|
||||||
|
} // lib.optionalAttrs config.services.xserver.desktopManager.gnome.enable {
|
||||||
|
|
||||||
|
ungoogled-chromium = super.ungoogled-chromium.override {
|
||||||
|
commandLineArgs = "--enable-features=OverlayScrollbar,OverlayScrollbarFlashAfterAnyScrollUpdate,OverlayScrollbarFlashWhenMouseEnter --auth-server-whitelist=*privatevoid.net";
|
||||||
|
};
|
||||||
|
|
||||||
|
gnome = super.gnome.overrideScope' (self': super': {
|
||||||
|
inherit (patched) nautilus;
|
||||||
|
gnome-control-center = patched.gnome-control-center.override { inherit (self') gnome-user-share; };
|
||||||
|
});
|
||||||
|
|
||||||
|
tilix = patched.tilix-high-refresh-rate;
|
||||||
|
|
||||||
|
|
||||||
|
}))
|
||||||
|
];
|
||||||
|
}
|
54
modules/default.nix
Normal file
54
modules/default.nix
Normal file
|
@ -0,0 +1,54 @@
|
||||||
|
inputs:
|
||||||
|
with builtins;
|
||||||
|
let
|
||||||
|
aspects = [
|
||||||
|
./autopatch
|
||||||
|
./desktop
|
||||||
|
./enterprise
|
||||||
|
./firewall
|
||||||
|
./games
|
||||||
|
./hardened
|
||||||
|
./hyprspace
|
||||||
|
./ipfs-lain
|
||||||
|
./jackett
|
||||||
|
./laptop-config
|
||||||
|
./lidarr
|
||||||
|
./networking-client
|
||||||
|
./nextcloud-client
|
||||||
|
./nix-builder
|
||||||
|
./nix-config
|
||||||
|
./nix-register-flakes
|
||||||
|
./nm-vdns-auto
|
||||||
|
./persistence
|
||||||
|
./prowlarr
|
||||||
|
./shell-config
|
||||||
|
./sound
|
||||||
|
./ssh
|
||||||
|
];
|
||||||
|
mappedAspects = map (x: { name = baseNameOf x; value = import x; }) aspects;
|
||||||
|
in rec {
|
||||||
|
modules = listToAttrs mappedAspects;
|
||||||
|
sets = with modules; rec {
|
||||||
|
base = [
|
||||||
|
autopatch
|
||||||
|
enterprise
|
||||||
|
hardened
|
||||||
|
];
|
||||||
|
|
||||||
|
networking = [ firewall ssh ];
|
||||||
|
|
||||||
|
client-networking = networking ++ [ networking-client nm-vdns-auto ipfs-lain hyprspace ];
|
||||||
|
|
||||||
|
desktop = [
|
||||||
|
modules.desktop
|
||||||
|
inputs.home-manager.nixosModules.home-manager
|
||||||
|
nextcloud-client
|
||||||
|
nix-register-flakes
|
||||||
|
nix-config
|
||||||
|
shell-config
|
||||||
|
sound
|
||||||
|
] ++ base ++ client-networking;
|
||||||
|
|
||||||
|
laptop = desktop ++ [ laptop-config ];
|
||||||
|
};
|
||||||
|
}
|
2
modules/desktop/appbar.conf
Normal file
2
modules/desktop/appbar.conf
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
[org.gnome.shell]
|
||||||
|
favorite-apps=[ 'chromium-browser.desktop', 'org.gnome.Epiphany.desktop', 'org.gnome.Calendar.desktop', 'org.gnome.Lollypop.desktop', 'org.gnome.Nautilus.desktop' ]
|
81
modules/desktop/default.nix
Normal file
81
modules/desktop/default.nix
Normal file
|
@ -0,0 +1,81 @@
|
||||||
|
{ pkgs, config, inputs, lib, ... }: let
|
||||||
|
portRanges = [
|
||||||
|
# GSConnect
|
||||||
|
{ from = 1716; to = 1764; }
|
||||||
|
];
|
||||||
|
in {
|
||||||
|
imports = [
|
||||||
|
./package-sets.nix
|
||||||
|
];
|
||||||
|
|
||||||
|
services.xserver = {
|
||||||
|
enable = true;
|
||||||
|
displayManager.gdm.enable = true;
|
||||||
|
desktopManager.gnome = {
|
||||||
|
enable = true;
|
||||||
|
extraGSettingsOverrides = builtins.readFile ./gsettings.conf;
|
||||||
|
favoriteAppsOverride = builtins.readFile ./appbar.conf;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
programs.adb.enable = true;
|
||||||
|
|
||||||
|
environment.gnome.excludePackages = with pkgs.gnome; [
|
||||||
|
cheese
|
||||||
|
gnome-logs
|
||||||
|
gnome-music
|
||||||
|
totem
|
||||||
|
pkgs.gnome-photos
|
||||||
|
];
|
||||||
|
|
||||||
|
environment.variables = {
|
||||||
|
EDITOR = "nvim";
|
||||||
|
SSH_ASKPASS = lib.mkForce "";
|
||||||
|
};
|
||||||
|
|
||||||
|
fonts.fonts = with pkgs; [
|
||||||
|
terminus_font_fancy
|
||||||
|
nerdfonts-terminus
|
||||||
|
noto-fonts
|
||||||
|
];
|
||||||
|
|
||||||
|
security = {
|
||||||
|
sudo.enable = false;
|
||||||
|
doas.enable = true;
|
||||||
|
doas.extraRules = [{
|
||||||
|
groups = [ "wheel" ];
|
||||||
|
noPass = true;
|
||||||
|
}];
|
||||||
|
};
|
||||||
|
|
||||||
|
services.printing.enable = true;
|
||||||
|
|
||||||
|
networking.firewall.allowedTCPPortRanges = portRanges;
|
||||||
|
networking.firewall.allowedUDPPortRanges = portRanges;
|
||||||
|
|
||||||
|
services.avahi.enable = false;
|
||||||
|
|
||||||
|
services.fwupd.enable = true;
|
||||||
|
|
||||||
|
boot = {
|
||||||
|
loader.timeout = 0;
|
||||||
|
initrd.verbose = false;
|
||||||
|
consoleLogLevel = 0;
|
||||||
|
kernelParams = [ "quiet" "udev.log_priority=3" ];
|
||||||
|
plymouth.enable = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
zramSwap.enable = true;
|
||||||
|
zramSwap.algorithm = "zstd";
|
||||||
|
|
||||||
|
services.packagekit.enable = lib.mkForce false;
|
||||||
|
programs.gnome-terminal.enable = false;
|
||||||
|
|
||||||
|
qt5 = {
|
||||||
|
enable = true;
|
||||||
|
platformTheme = "gtk2";
|
||||||
|
style = "gtk2";
|
||||||
|
};
|
||||||
|
|
||||||
|
virtualisation.libvirtd.enable = true;
|
||||||
|
}
|
62
modules/desktop/gsettings.conf
Normal file
62
modules/desktop/gsettings.conf
Normal file
|
@ -0,0 +1,62 @@
|
||||||
|
[org.gnome.desktop.interface]
|
||||||
|
font-name='Arimo 11'
|
||||||
|
gtk-im-module='gtk-im-context-simple'
|
||||||
|
gtk-theme='Adwaita'
|
||||||
|
monospace-font-name='Terminus Bold 10'
|
||||||
|
toolkit-accessibility=false
|
||||||
|
|
||||||
|
[org.gnome.desktop.wm.keybindings]
|
||||||
|
close=['<Super>q']
|
||||||
|
cycle-windows=@as []
|
||||||
|
cycle-windows-backward=@as []
|
||||||
|
minimize=@as []
|
||||||
|
panel-main-menu=@as []
|
||||||
|
panel-run-dialog=['<Shift><Alt>space']
|
||||||
|
raise-or-lower=['<Super>h']
|
||||||
|
switch-group=['<Alt>Escape']
|
||||||
|
switch-group-backward=['<Shift><Alt>Escape']
|
||||||
|
switch-panels=@as []
|
||||||
|
switch-panels-backward=@as []
|
||||||
|
switch-windows=['<Primary><Alt>Tab']
|
||||||
|
switch-windows-backward=['<Primary><Shift><Alt>Tab']
|
||||||
|
toggle-fullscreen=['<Alt><Super>f']
|
||||||
|
|
||||||
|
[org.gnome.settings-daemon.plugins.media-keys]
|
||||||
|
control-center=['<Alt><Super>Return']
|
||||||
|
custom-keybindings=['/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/launchtilix/', '/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/launchsysmon/']
|
||||||
|
eject=['<Alt>Return']
|
||||||
|
email=['<Super>m']
|
||||||
|
home=['<Super>f']
|
||||||
|
magnifier=['<Shift><Super>x']
|
||||||
|
magnifier-zoom-in=['<Super>c']
|
||||||
|
magnifier-zoom-out=['<Super>x']
|
||||||
|
media=['<Super>AudioPlay']
|
||||||
|
mic-mute=['<Super>AudioMute']
|
||||||
|
on-screen-keyboard=['<Alt><Super>k']
|
||||||
|
volume-down=['<Primary><Alt><Super>Tab']
|
||||||
|
volume-up=['<Primary><Alt>Tab']
|
||||||
|
window-screenshot-clip=['<Super>Print']
|
||||||
|
www=['<Super>w']
|
||||||
|
|
||||||
|
[org.gnome.settings-daemon.plugins.media-keys.launchtilix]
|
||||||
|
binding='<Super>Return'
|
||||||
|
command='gapplication launch com.gexperts.Tilix'
|
||||||
|
name='Launch Tilix'
|
||||||
|
|
||||||
|
[org.gnome.settings-daemon.plugins.media-keys.launchsysmon]
|
||||||
|
binding='<Super>y'
|
||||||
|
command='gtk-launch gnome-system-monitor'
|
||||||
|
name='Launch System Monitor'
|
||||||
|
|
||||||
|
[org.gnome.desktop.peripherals.keyboard]
|
||||||
|
delay=uint32 319
|
||||||
|
numlock-state=true
|
||||||
|
repeat=true
|
||||||
|
repeat-interval=uint32 15
|
||||||
|
|
||||||
|
[org.gnome.desktop.peripherals.touchpad]
|
||||||
|
edge-scrolling-enabled=false
|
||||||
|
natural-scroll=false
|
||||||
|
speed=0.375
|
||||||
|
tap-to-click=true
|
||||||
|
two-finger-scrolling-enabled=true
|
64
modules/desktop/package-sets.nix
Normal file
64
modules/desktop/package-sets.nix
Normal file
|
@ -0,0 +1,64 @@
|
||||||
|
{ pkgs, config, inputs, lib, ... }: let
|
||||||
|
sets = with pkgs; rec {
|
||||||
|
editor = [
|
||||||
|
inputs.modular-nvim.defaultPackage.x86_64-linux
|
||||||
|
];
|
||||||
|
writing = [
|
||||||
|
apostrophe
|
||||||
|
libreoffice
|
||||||
|
];
|
||||||
|
drawing = [
|
||||||
|
pkgs.drawing
|
||||||
|
gimp
|
||||||
|
inkscape
|
||||||
|
krita
|
||||||
|
xournalpp
|
||||||
|
];
|
||||||
|
cli-utils = [
|
||||||
|
bat
|
||||||
|
dua
|
||||||
|
duf
|
||||||
|
fzf
|
||||||
|
git
|
||||||
|
hyperfine
|
||||||
|
lsd
|
||||||
|
ripgrep
|
||||||
|
wget
|
||||||
|
xh
|
||||||
|
];
|
||||||
|
www = [
|
||||||
|
ungoogled-chromium
|
||||||
|
];
|
||||||
|
gui-apps = with inputs.self.packages.x86_64-linux; [
|
||||||
|
identity
|
||||||
|
obfuscate
|
||||||
|
] ++ [
|
||||||
|
celluloid
|
||||||
|
gnome-firmware-updater
|
||||||
|
gnome-podcasts
|
||||||
|
gnome.dconf-editor
|
||||||
|
gnome.gnome-boxes
|
||||||
|
gnome.gnome-todo
|
||||||
|
gnome.gnome-tweaks
|
||||||
|
gnome.nautilus-python
|
||||||
|
kooha
|
||||||
|
lollypop
|
||||||
|
pavucontrol
|
||||||
|
scrcpy
|
||||||
|
tilix
|
||||||
|
virt-manager
|
||||||
|
];
|
||||||
|
dev-tools = [
|
||||||
|
bustle
|
||||||
|
gnome-builder
|
||||||
|
inputs.self.packages.x86_64-linux.neovim-gtk
|
||||||
|
];
|
||||||
|
system = with pkgs.gnomeExtensions; [
|
||||||
|
appindicator
|
||||||
|
caffeine
|
||||||
|
gsconnect
|
||||||
|
];
|
||||||
|
};
|
||||||
|
in {
|
||||||
|
environment.systemPackages = lib.flatten (builtins.attrValues sets);
|
||||||
|
}
|
30
modules/enterprise/default.nix
Normal file
30
modules/enterprise/default.nix
Normal file
|
@ -0,0 +1,30 @@
|
||||||
|
{ pkgs, config, inputs, ... }:
|
||||||
|
let
|
||||||
|
orgDomain = "privatevoid.net";
|
||||||
|
orgRealm = "PRIVATEVOID.NET";
|
||||||
|
in {
|
||||||
|
krb5 = {
|
||||||
|
enable = true;
|
||||||
|
domain_realm = {
|
||||||
|
${orgDomain} = orgRealm;
|
||||||
|
".${orgDomain}" = orgRealm;
|
||||||
|
};
|
||||||
|
libdefaults = {
|
||||||
|
default_realm = orgRealm;
|
||||||
|
dns_lookup_kdc = true;
|
||||||
|
rdns = false;
|
||||||
|
forwardable = true;
|
||||||
|
default_ccache_name = "KEYRING:persistent:%{uid}";
|
||||||
|
pkinit_anchors = "FILE:${inputs.self.packages.x86_64-linux.privatevoid-smart-card-ca-bundle}";
|
||||||
|
};
|
||||||
|
realms = {
|
||||||
|
"${orgRealm}" = rec {
|
||||||
|
kdc = "authsys.virtual-machines.privatevoid.net";
|
||||||
|
admin_server = kdc;
|
||||||
|
kpasswd_server = kdc;
|
||||||
|
default_domain = orgDomain;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
services.pcscd.enable = true;
|
||||||
|
}
|
5
modules/firewall/default.nix
Normal file
5
modules/firewall/default.nix
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
{ pkgs, lib, ... }:
|
||||||
|
{
|
||||||
|
networking.firewall.package = pkgs.iptables-nftables-compat;
|
||||||
|
environment.systemPackages = [ pkgs.nftables ];
|
||||||
|
}
|
6
modules/games/default.nix
Normal file
6
modules/games/default.nix
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
{ pkgs, config, ... }:
|
||||||
|
{
|
||||||
|
nixpkgs.config.allowUnfree = true;
|
||||||
|
hardware.opengl.driSupport32Bit = true;
|
||||||
|
programs.steam.enable = true;
|
||||||
|
}
|
15
modules/hardened/default.nix
Normal file
15
modules/hardened/default.nix
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
{ pkgs, config, ... }:
|
||||||
|
{
|
||||||
|
boot.kernel.sysctl = {
|
||||||
|
"kernel.yama.ptrace_scope" = 1;
|
||||||
|
"kernel.kptr_restrict" = 2;
|
||||||
|
|
||||||
|
"net.ipv4.conf.all.rp_filter" = 1;
|
||||||
|
"net.ipv4.conf.default.rp_filter" = 1;
|
||||||
|
|
||||||
|
"net.ipv4.conf.all.send_redirects" = false;
|
||||||
|
"net.ipv4.conf.default.send_redirects" = false;
|
||||||
|
|
||||||
|
"net.ipv4.icmp_echo_ignore_broadcasts" = true;
|
||||||
|
};
|
||||||
|
}
|
79
modules/hyprspace/default.nix
Normal file
79
modules/hyprspace/default.nix
Normal file
|
@ -0,0 +1,79 @@
|
||||||
|
{ inputs, pkgs, lib, hosts, config, ... }:
|
||||||
|
let
|
||||||
|
inherit (config.networking) hostName;
|
||||||
|
inherit (inputs.self.packages.${pkgs.system}) hyprspace;
|
||||||
|
hyprspaceCapableNodes = lib.filterAttrs (_: host: host ? hypr) hosts;
|
||||||
|
peersFormatted = builtins.mapAttrs (_: x: { "${x.hypr.addr}".id = x.hypr.id; }) hyprspaceCapableNodes;
|
||||||
|
peersFiltered = lib.filterAttrs (name: _: name != hostName) peersFormatted;
|
||||||
|
buildHyprspacePeerList = peers: pkgs.writeText "hyprspace-peers.yml" (builtins.toJSON peers);
|
||||||
|
peers = lib.foldAttrs (n: _: n) null (builtins.attrValues peersFiltered);
|
||||||
|
peerList = buildHyprspacePeerList peers;
|
||||||
|
myNode = hosts.${hostName};
|
||||||
|
listenPort = myNode.hypr.listenPort or 8001;
|
||||||
|
|
||||||
|
precedingConfig = pkgs.writeText "hyprspace-interface.yml" ''
|
||||||
|
interface:
|
||||||
|
name: hyprspace
|
||||||
|
listen_port: ${builtins.toString listenPort}
|
||||||
|
id: ${myNode.hypr.id}
|
||||||
|
address: ${myNode.hypr.addr}/24
|
||||||
|
private_key: !!binary |
|
||||||
|
'';
|
||||||
|
|
||||||
|
privateKeyFile = config.age.secrets.hyprspace-key.path;
|
||||||
|
runConfig = "/run/hyprspace.yml";
|
||||||
|
in {
|
||||||
|
networking.hosts = lib.mapAttrs' (k: v: lib.nameValuePair (v.hypr.addr) ([k "${k}.hypr"])) hyprspaceCapableNodes;
|
||||||
|
age.secrets.hyprspace-key = {
|
||||||
|
file = ../../secrets/hyprspace-key- + "${hostName}.age";
|
||||||
|
mode = "0400";
|
||||||
|
};
|
||||||
|
age.secrets.ipfs-swarm-key = {
|
||||||
|
file = ../../secrets/ipfs-swarm-key.age;
|
||||||
|
mode = "0400";
|
||||||
|
};
|
||||||
|
systemd.services.hyprspace = {
|
||||||
|
enable = true;
|
||||||
|
wantedBy = [ "multi-user.target" ];
|
||||||
|
wants = [ "network-online.target" ];
|
||||||
|
after = [ "network-online.target" ];
|
||||||
|
preStart = ''
|
||||||
|
test -e ${runConfig} && rm ${runConfig}
|
||||||
|
touch ${runConfig}
|
||||||
|
chmod 0600 ${runConfig}
|
||||||
|
|
||||||
|
cat ${precedingConfig} >> ${runConfig}
|
||||||
|
sed 's/^/ /g' ${privateKeyFile} >> ${runConfig}
|
||||||
|
echo -n 'peers: ' >> ${runConfig}
|
||||||
|
cat ${peerList} >> ${runConfig}
|
||||||
|
|
||||||
|
chmod 0400 ${runConfig}
|
||||||
|
'';
|
||||||
|
environment.HYPRSPACE_SWARM_KEY = config.age.secrets.ipfs-swarm-key.path;
|
||||||
|
serviceConfig = {
|
||||||
|
ExecStart = "${hyprspace}/bin/hyprspace up hyprspace -f -c ${runConfig}";
|
||||||
|
ExecStop = "${hyprspace}/bin/hyprspace down hyprspace";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
networking.firewall = {
|
||||||
|
allowedTCPPorts = [ listenPort ];
|
||||||
|
allowedUDPPorts = [ listenPort ];
|
||||||
|
trustedInterfaces = [ "hyprspace" ];
|
||||||
|
};
|
||||||
|
networking.networkmanager.dispatcherScripts = [{
|
||||||
|
source = pkgs.writeShellScript "hyprspace-reconnect.sh" ''
|
||||||
|
[[ "$2" != "up" ]] && exit 0
|
||||||
|
PATH=${pkgs.systemd}/bin:$PATH
|
||||||
|
case $1 in
|
||||||
|
wl*|en*)
|
||||||
|
if systemctl is-active hyprspace.service; then
|
||||||
|
${builtins.concatStringsSep "\n" (map (peer: "/run/wrappers/bin/ping -qnA -c3 -W1 ${peer} && exit") (builtins.attrNames peers))}
|
||||||
|
fi
|
||||||
|
systemctl restart --no-block hyprspace.service;;
|
||||||
|
esac
|
||||||
|
exit 0
|
||||||
|
'';
|
||||||
|
type = "basic";
|
||||||
|
}];
|
||||||
|
}
|
||||||
|
|
60
modules/ipfs-lain/default.nix
Normal file
60
modules/ipfs-lain/default.nix
Normal file
|
@ -0,0 +1,60 @@
|
||||||
|
{ config, lib, pkgs, ... }:
|
||||||
|
let
|
||||||
|
cfg = config.services.ipfs;
|
||||||
|
ipfsApi = pkgs.writeTextDir "api" "/ip4/127.0.0.1/tcp/5001";
|
||||||
|
in {
|
||||||
|
services.ipfs = {
|
||||||
|
enable = true;
|
||||||
|
localDiscovery = true;
|
||||||
|
autoMount = true;
|
||||||
|
startWhenNeeded = false;
|
||||||
|
enableGC = true;
|
||||||
|
extraFlags = [ "--enable-pubsub-experiment" "--enable-namesys-pubsub" ];
|
||||||
|
extraConfig = {
|
||||||
|
Bootstrap = [
|
||||||
|
"/ip4/95.216.8.12/tcp/4001/p2p/Qmd7QHZU8UjfYdwmjmq1SBh9pvER9AwHpfwQvnvNo3HBBo"
|
||||||
|
"/ip4/51.38.87.150/tcp/4001/p2p/12D3KooWDUgNsoLVauCDpRAo54mc4whoBudgeXQnZZK2iVYhBLCN"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
systemd.services.ipfs.environment.LIBP2P_FORCE_PNET = "1";
|
||||||
|
systemd.sockets = {
|
||||||
|
ipfs-api.enable = false;
|
||||||
|
ipfs-gateway.enable = false;
|
||||||
|
};
|
||||||
|
|
||||||
|
environment = {
|
||||||
|
variables.IPFS_PATH = lib.mkForce "${ipfsApi}";
|
||||||
|
shellAliases = {
|
||||||
|
ipfs-admin = "doas -u ${cfg.user} env IPFS_PATH=${cfg.dataDir} ipfs";
|
||||||
|
f = "ipfs files";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
networking.firewall.allowedTCPPorts = [ 4001 ];
|
||||||
|
|
||||||
|
environment.systemPackages = lib.singleton (pkgs.writeShellScriptBin "share" ''
|
||||||
|
PATH=${cfg.package}/bin:$PATH
|
||||||
|
set -e
|
||||||
|
cid=$(ipfs add -Qrp --pin=false "$@")
|
||||||
|
test -n $cid || exit 0
|
||||||
|
echo -e "\n\n IPFS path: /ipfs/$cid"
|
||||||
|
echo -e " Web link: https://$(ipfs cid base32 $cid).ipfs.privatevoid.net\n"
|
||||||
|
'');
|
||||||
|
networking.networkmanager.dispatcherScripts = [{
|
||||||
|
source = pkgs.writeShellScript "nm-ipfs-reconnect.sh" ''
|
||||||
|
[[ "$2" != "up" ]] && exit 0
|
||||||
|
PATH=${pkgs.systemd}/bin:${pkgs.findutils}/bin:${cfg.package}/bin:$PATH
|
||||||
|
export IPFS_PATH=${ipfsApi}
|
||||||
|
systemctl is-active ipfs.service || exit 0
|
||||||
|
case $1 in
|
||||||
|
wl*|en*)
|
||||||
|
ipfs swarm peers | xargs -P4 -n1 timeout 3 ipfs swarm disconnect
|
||||||
|
ipfs bootstrap | xargs -P4 -n1 timeout 10 ipfs swarm connect
|
||||||
|
esac
|
||||||
|
exit 0
|
||||||
|
'';
|
||||||
|
type = "basic";
|
||||||
|
}];
|
||||||
|
}
|
5
modules/jackett/default.nix
Normal file
5
modules/jackett/default.nix
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
{ pkgs, config, ... }:
|
||||||
|
{
|
||||||
|
services.jackett.enable = true;
|
||||||
|
services.jackett.openFirewall = true;
|
||||||
|
}
|
11
modules/laptop-config/default.nix
Normal file
11
modules/laptop-config/default.nix
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
{ pkgs, config, lib, inputs, ... }:
|
||||||
|
{
|
||||||
|
nix.distributedBuilds = true;
|
||||||
|
nix.settings.system-features = [ "nixos-test" "benchmark" "kvm" ];
|
||||||
|
imports = [ ./gdm-touchpad-config.nix ];
|
||||||
|
services.tlp.enable = false;
|
||||||
|
services.thermald.enable = true;
|
||||||
|
|
||||||
|
powerManagement.powertop.enable = true;
|
||||||
|
powerManagement.scsiLinkPolicy = "med_power_with_dipm";
|
||||||
|
}
|
36
modules/laptop-config/gdm-touchpad-config.nix
Normal file
36
modules/laptop-config/gdm-touchpad-config.nix
Normal file
|
@ -0,0 +1,36 @@
|
||||||
|
{ pkgs, lib, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
programs.dconf.profiles.gdm = lib.mkForce (let
|
||||||
|
customDconf = pkgs.writeTextFile {
|
||||||
|
name = "gdm-dconf-touchpad";
|
||||||
|
destination = "/dconf/gdm-custom";
|
||||||
|
text = ''
|
||||||
|
[org/gnome/desktop/peripherals/touchpad]
|
||||||
|
edge-scrolling-enabled=false
|
||||||
|
natural-scroll=false
|
||||||
|
speed=0.375
|
||||||
|
tap-to-click=true
|
||||||
|
two-finger-scrolling-enabled=true
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
customDconfDb = pkgs.stdenv.mkDerivation {
|
||||||
|
name = "gdm-dconf-db";
|
||||||
|
buildCommand = ''
|
||||||
|
${pkgs.dconf}/bin/dconf compile $out ${customDconf}/dconf
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
in pkgs.stdenv.mkDerivation {
|
||||||
|
name = "dconf-gdm-profile";
|
||||||
|
buildCommand = with { gdm = pkgs.gnome.gdm; }; ''
|
||||||
|
# Check that the GDM profile starts with what we expect.
|
||||||
|
if [ $(head -n 1 ${gdm}/share/dconf/profile/gdm) != "user-db:user" ]; then
|
||||||
|
echo "GDM dconf profile changed, please update gdm.nix"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
# Insert our custom DB behind it.
|
||||||
|
sed '2ifile-db:${customDconfDb}' ${gdm}/share/dconf/profile/gdm > $out
|
||||||
|
'';
|
||||||
|
});
|
||||||
|
}
|
5
modules/lidarr/default.nix
Normal file
5
modules/lidarr/default.nix
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
{ pkgs, config, ... }:
|
||||||
|
{
|
||||||
|
services.lidarr.enable = true;
|
||||||
|
services.lidarr.openFirewall = true;
|
||||||
|
}
|
21
modules/networking-client/default.nix
Normal file
21
modules/networking-client/default.nix
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
{
|
||||||
|
networking.useDHCP = false;
|
||||||
|
|
||||||
|
networking.networkmanager.dns = "systemd-resolved";
|
||||||
|
networking.networkmanager.enableStrongSwan = false;
|
||||||
|
services.resolved = {
|
||||||
|
enable = true;
|
||||||
|
fallbackDns = [ "10.1.0.1" ];
|
||||||
|
llmnr = "true";
|
||||||
|
dnssec = "false";
|
||||||
|
extraConfig = "Cache=no-negative";
|
||||||
|
};
|
||||||
|
networking.firewall = let
|
||||||
|
ports = [
|
||||||
|
5355 # llmnr
|
||||||
|
];
|
||||||
|
in {
|
||||||
|
allowedTCPPorts = ports;
|
||||||
|
allowedUDPPorts = ports;
|
||||||
|
};
|
||||||
|
}
|
15
modules/nextcloud-client/default.nix
Normal file
15
modules/nextcloud-client/default.nix
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
{ pkgs, config, ... }:
|
||||||
|
{
|
||||||
|
# expose nextcloud client into the environment
|
||||||
|
environment.systemPackages = [ pkgs.nextcloud-client ];
|
||||||
|
|
||||||
|
systemd.user.services.nextcloud = {
|
||||||
|
description = "Nextcloud Client Service";
|
||||||
|
wantedBy = [ "gnome-session.target" ];
|
||||||
|
serviceConfig = {
|
||||||
|
ExecStart = "${pkgs.nextcloud-client}/bin/nextcloud --background";
|
||||||
|
Restart = "always";
|
||||||
|
Slice = "background.slice";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
16
modules/nix-builder/default.nix
Normal file
16
modules/nix-builder/default.nix
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
{ pkgs, config, ... }:
|
||||||
|
{
|
||||||
|
nix.settings.trusted-users = [ "nix" ];
|
||||||
|
users.users.nix = {
|
||||||
|
isSystemUser = true;
|
||||||
|
description = "Nix Remote Build";
|
||||||
|
home = "/var/tmp/nix-remote-builder";
|
||||||
|
createHome = true;
|
||||||
|
useDefaultShell = true;
|
||||||
|
openssh.authorizedKeys.keys = [
|
||||||
|
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIBa9gDXWdp7Kqzbjz9Zchu91ZoYcBD6AbjvuktYA//yg"
|
||||||
|
];
|
||||||
|
group = "nix";
|
||||||
|
};
|
||||||
|
users.groups.nix = {};
|
||||||
|
}
|
76
modules/nix-config/default.nix
Normal file
76
modules/nix-config/default.nix
Normal file
|
@ -0,0 +1,76 @@
|
||||||
|
{ pkgs, lib, config, inputs, ... }@args:
|
||||||
|
let
|
||||||
|
builder = {
|
||||||
|
systems = [ "x86_64-linux" "i686-linux" ];
|
||||||
|
speedFactor = 4;
|
||||||
|
supportedFeatures = [ "benchmark" "nixos-test" ];
|
||||||
|
sshKey = config.age.secrets.nixBuilderKey.path;
|
||||||
|
};
|
||||||
|
bigBuilder = builder // {
|
||||||
|
speedFactor = 16;
|
||||||
|
supportedFeatures = builder.supportedFeatures ++ [ "kvm" "big-parallel" ];
|
||||||
|
};
|
||||||
|
in {
|
||||||
|
age.secrets.nixBuilderKey = {
|
||||||
|
file = ../../secrets/builder_key.age;
|
||||||
|
mode = "0400";
|
||||||
|
};
|
||||||
|
nixpkgs.overlays = [
|
||||||
|
(self: super: {
|
||||||
|
nixSuper = inputs.nix-super.defaultPackage.x86_64-linux;
|
||||||
|
})
|
||||||
|
];
|
||||||
|
nix = {
|
||||||
|
package = pkgs.nixSuper;
|
||||||
|
|
||||||
|
settings = {
|
||||||
|
trusted-users = [ "root" "@wheel" ];
|
||||||
|
auto-optimise-store = true;
|
||||||
|
|
||||||
|
substituters = [
|
||||||
|
"https://cache.privatevoid.net"
|
||||||
|
"https://max.cachix.org"
|
||||||
|
"https://reflex.privatevoid.net?priority=10"
|
||||||
|
];
|
||||||
|
|
||||||
|
trusted-public-keys = [
|
||||||
|
"cache.privatevoid.net:SErQ8bvNWANeAvtsOESUwVYr2VJynfuc9JRwlzTTkVg="
|
||||||
|
"max.cachix.org-1:oSMQ1zYLR8H4L17hfe6ETlI/d+VeiBykB8PbBdPtDJw="
|
||||||
|
];
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
extraOptions = ''
|
||||||
|
experimental-features = nix-command flakes
|
||||||
|
warn-dirty = false
|
||||||
|
builders-use-substitutes = true
|
||||||
|
flake-registry = ${
|
||||||
|
pkgs.writeText "null-registry.json" ''{"flakes":[],"version":2}''
|
||||||
|
}
|
||||||
|
'';
|
||||||
|
|
||||||
|
gc = {
|
||||||
|
automatic = true;
|
||||||
|
dates = "weekly";
|
||||||
|
options = "--delete-older-than 30d";
|
||||||
|
};
|
||||||
|
|
||||||
|
distributedBuilds = true;
|
||||||
|
|
||||||
|
buildMachines = [
|
||||||
|
(bigBuilder // {
|
||||||
|
sshUser = "nixbuilder";
|
||||||
|
hostName = "animus.com";
|
||||||
|
maxJobs = 4;
|
||||||
|
})
|
||||||
|
] ++
|
||||||
|
(lib.optional (config.networking.hostName != "TITAN") (bigBuilder // {
|
||||||
|
sshUser = "nix";
|
||||||
|
hostName = "titan.hypr";
|
||||||
|
speedFactor = 12;
|
||||||
|
maxJobs = 12;
|
||||||
|
}));
|
||||||
|
};
|
||||||
|
|
||||||
|
environment.systemPackages = [ pkgs.cachix ];
|
||||||
|
}
|
41
modules/nix-register-flakes/default.nix
Normal file
41
modules/nix-register-flakes/default.nix
Normal file
|
@ -0,0 +1,41 @@
|
||||||
|
{ config, inputs, lib, pkgs, ... }:
|
||||||
|
|
||||||
|
with inputs;
|
||||||
|
{
|
||||||
|
nix.nixPath = [
|
||||||
|
"repl=/etc/nix/flake-channels/system/repl.nix"
|
||||||
|
"nixpkgs=/etc/nix/flake-channels/nixpkgs"
|
||||||
|
"home-manager=/etc/nix/flake-channels/home-manager"
|
||||||
|
];
|
||||||
|
|
||||||
|
nix.registry = {
|
||||||
|
system.flake = self;
|
||||||
|
nixpkgs.flake = nixpkgs;
|
||||||
|
default.flake = nixpkgs;
|
||||||
|
home-manager.flake = home-manager;
|
||||||
|
vim.flake = let
|
||||||
|
nixpkgsSelfLock = lib.importJSON "${self}/flake.lock";
|
||||||
|
vimLock = lib.importJSON "${modular-nvim}/flake.lock";
|
||||||
|
patchedLock = lib.recursiveUpdate vimLock { nodes.nixpkgs.locked = (nixpkgsSelfLock.nodes.nixpkgs.locked); };
|
||||||
|
patchedLockFile = pkgs.writeText "patched-flake.lock" (builtins.toJSON patchedLock);
|
||||||
|
in pkgs.runCommand "vim-flake" {} ''
|
||||||
|
cp -vr ${modular-nvim} $out
|
||||||
|
chmod +w $out
|
||||||
|
rm $out/flake.lock
|
||||||
|
cp -v ${patchedLockFile} $out/flake.lock
|
||||||
|
'';
|
||||||
|
templates.to = {
|
||||||
|
owner = "max";
|
||||||
|
repo = "flake-templates";
|
||||||
|
ref = "master";
|
||||||
|
host = "git.privatevoid.net";
|
||||||
|
type = "gitlab";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
environment.etc = {
|
||||||
|
"nix/flake-channels/system".source = inputs.self;
|
||||||
|
"nix/flake-channels/nixpkgs".source = nixpkgs;
|
||||||
|
"nix/flake-channels/home-manager".source = home-manager;
|
||||||
|
};
|
||||||
|
}
|
16
modules/nm-vdns-auto/default.nix
Normal file
16
modules/nm-vdns-auto/default.nix
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
{ pkgs, config, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
networking.networkmanager.dispatcherScripts = [{
|
||||||
|
source = pkgs.writeShellScript "vdns.sh" ''
|
||||||
|
[[ "$2" != "up" ]] && exit 0
|
||||||
|
case $1 in
|
||||||
|
wl*|en*)
|
||||||
|
sleep 0.5;
|
||||||
|
${pkgs.networkmanager}/bin/nmcli c up vDNS;;
|
||||||
|
esac
|
||||||
|
exit 0
|
||||||
|
'';
|
||||||
|
type = "basic";
|
||||||
|
}];
|
||||||
|
}
|
23
modules/persistence/default.nix
Normal file
23
modules/persistence/default.nix
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
{ pkgs, config, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
services.openssh.hostKeys = [
|
||||||
|
{
|
||||||
|
bits = 4096;
|
||||||
|
path = "/persist/keys/ssh/ssh_host_rsa_key";
|
||||||
|
type = "rsa";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
path = "/persist/keys/ssh/ssh_host_ed25519_key";
|
||||||
|
type = "ed25519";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
|
||||||
|
services.ipfs.dataDir = "/persist/ipfs";
|
||||||
|
services.lidarr.dataDir = "/persist/db/lidarr";
|
||||||
|
services.jackett.dataDir = "/persist/db/jackett";
|
||||||
|
|
||||||
|
environment.etc = {
|
||||||
|
"NetworkManager/system-connections".source = "/persist/config/NetworkManager/system-connections";
|
||||||
|
};
|
||||||
|
}
|
5
modules/prowlarr/default.nix
Normal file
5
modules/prowlarr/default.nix
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
{ pkgs, config, ... }:
|
||||||
|
{
|
||||||
|
services.prowlarr.enable = true;
|
||||||
|
services.prowlarr.openFirewall = true;
|
||||||
|
}
|
81
modules/shell-config/default.nix
Normal file
81
modules/shell-config/default.nix
Normal file
|
@ -0,0 +1,81 @@
|
||||||
|
{ pkgs, config, ... }:
|
||||||
|
let
|
||||||
|
component = name: builtins.readFile (builtins.toString ../../config/zsh/components + "/${name}.zsh");
|
||||||
|
|
||||||
|
snippets = map component [
|
||||||
|
"console-256color"
|
||||||
|
"fuzzy-tab"
|
||||||
|
"magic-space"
|
||||||
|
"navigation"
|
||||||
|
] ++ [
|
||||||
|
"source ${pkgs.fzf}/share/fzf/key-bindings.zsh"
|
||||||
|
"ZSH_HIGHLIGHT_DIRS_BLACKLIST=(/* /ipfs /ipns)"
|
||||||
|
];
|
||||||
|
in {
|
||||||
|
environment.shellAliases = {
|
||||||
|
cat = "bat";
|
||||||
|
df = "duf";
|
||||||
|
doas = "doas ";
|
||||||
|
du = "dua";
|
||||||
|
ip = "ip -c";
|
||||||
|
ls = "lsd";
|
||||||
|
sudo = "sudo ";
|
||||||
|
tree = "lsd --tree";
|
||||||
|
uctl = "systemctl --user";
|
||||||
|
vim = "nvim";
|
||||||
|
nvr = "nvr --servername /tmp/nvim-remote-$USER --remote-tab";
|
||||||
|
nix-repl = "nix repl '<repl>'";
|
||||||
|
# thanks gytis
|
||||||
|
manix-view = ''manix "" | grep '^# ' | sed 's/^# \(.*\) (.*/\1/;s/ (.*//;s/^# //' | fzf --ansi --preview="manix '{}' | sed 's/type: /> type: /g' | bat -l Markdown --color=always --plain"'';
|
||||||
|
};
|
||||||
|
programs = {
|
||||||
|
zsh = {
|
||||||
|
enable = true;
|
||||||
|
histFile = "$HOME/.cache/zsh_history";
|
||||||
|
histSize = 15000;
|
||||||
|
setOptions = [
|
||||||
|
"autocd"
|
||||||
|
"autopushd"
|
||||||
|
"globcomplete"
|
||||||
|
"globstarshort"
|
||||||
|
"histexpiredupsfirst"
|
||||||
|
"histfcntllock"
|
||||||
|
"histignoredups"
|
||||||
|
"histnofunctions"
|
||||||
|
"histnostore"
|
||||||
|
"histreduceblanks"
|
||||||
|
"histverify"
|
||||||
|
"interactivecomments"
|
||||||
|
"monitor"
|
||||||
|
"nobadpattern"
|
||||||
|
"promptsubst"
|
||||||
|
"sharehistory"
|
||||||
|
"zle"
|
||||||
|
];
|
||||||
|
|
||||||
|
vteIntegration = true;
|
||||||
|
|
||||||
|
promptInit = builtins.readFile ../../config/zsh/prompt.zsh;
|
||||||
|
interactiveShellInit = builtins.concatStringsSep "\n" snippets;
|
||||||
|
enableCompletion = true;
|
||||||
|
autosuggestions.enable = true;
|
||||||
|
syntaxHighlighting = {
|
||||||
|
enable = true;
|
||||||
|
highlighters = [ "main" "pattern" ];
|
||||||
|
styles = {
|
||||||
|
"precommand" = "fg=33";
|
||||||
|
"arg0" = "fg=39";
|
||||||
|
"single-hyphen-option" = "fg=229";
|
||||||
|
"double-hyphen-option" = "fg=228";
|
||||||
|
"path" = "none";
|
||||||
|
};
|
||||||
|
|
||||||
|
# these are aliases, highlight them properly regardless
|
||||||
|
patterns = {
|
||||||
|
"doas" = "fg=33";
|
||||||
|
"sudo" = "fg=33";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
57
modules/sound/default.nix
Normal file
57
modules/sound/default.nix
Normal file
|
@ -0,0 +1,57 @@
|
||||||
|
{ pkgs, ... }:
|
||||||
|
{
|
||||||
|
sound.enable = true;
|
||||||
|
hardware.pulseaudio.enable = false;
|
||||||
|
security.rtkit.enable = true;
|
||||||
|
services.pipewire = {
|
||||||
|
enable = true;
|
||||||
|
pulse.enable = true;
|
||||||
|
alsa.enable = true;
|
||||||
|
alsa.support32Bit = true;
|
||||||
|
jack.enable = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
environment.systemPackages = with pkgs; [
|
||||||
|
|
||||||
|
# KXStudio stuff
|
||||||
|
cadence
|
||||||
|
carla
|
||||||
|
|
||||||
|
jack_oscrolloscope
|
||||||
|
jack_rack
|
||||||
|
jackmeter
|
||||||
|
qjackctl
|
||||||
|
|
||||||
|
# Audio plugins
|
||||||
|
AMB-plugins
|
||||||
|
aether-lv2
|
||||||
|
artyFX
|
||||||
|
calf
|
||||||
|
distrho
|
||||||
|
guitarix
|
||||||
|
helm
|
||||||
|
infamousPlugins
|
||||||
|
ingen
|
||||||
|
kapitonov-plugins-pack
|
||||||
|
ladspaPlugins
|
||||||
|
lv2
|
||||||
|
metersLv2
|
||||||
|
noise-repellent
|
||||||
|
rakarrack
|
||||||
|
rkrlv2
|
||||||
|
sorcer
|
||||||
|
swh_lv2
|
||||||
|
x42-plugins
|
||||||
|
zam-plugins
|
||||||
|
];
|
||||||
|
|
||||||
|
environment.variables = {
|
||||||
|
LADSPA_PATH = "/run/current-system/sw/lib/ladspa";
|
||||||
|
LV2_PATH = "/run/current-system/sw/lib/lv2";
|
||||||
|
LXVST_PATH = "/run/current-system/sw/lib/lxvst";
|
||||||
|
VST3_PATH = "/run/current-system/sw/lib/vst3";
|
||||||
|
VST_PATH = "/run/current-system/sw/lib/vst";
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
}
|
14
modules/ssh/default.nix
Normal file
14
modules/ssh/default.nix
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
{ hosts, config, lib, ... }:
|
||||||
|
let
|
||||||
|
filtered = lib.filterAttrs (_: host: host ? ssh) hosts;
|
||||||
|
idCapable = lib.filterAttrs (_: host: host.ssh ? id) filtered;
|
||||||
|
configCapable = lib.filterAttrs (_: host: host.ssh ? extraConfig) filtered;
|
||||||
|
|
||||||
|
sshHosts = lib.mapAttrs (_: host: host.ssh.id) idCapable;
|
||||||
|
sshExtras = lib.mapAttrsToList (_: host: host.ssh.extraConfig) configCapable;
|
||||||
|
in {
|
||||||
|
programs.ssh = {
|
||||||
|
knownHosts = sshHosts;
|
||||||
|
extraConfig = builtins.concatStringsSep "\n" sshExtras;
|
||||||
|
};
|
||||||
|
}
|
79
packages/apps/identity/default.nix
Normal file
79
packages/apps/identity/default.nix
Normal file
|
@ -0,0 +1,79 @@
|
||||||
|
{ lib, stdenv
|
||||||
|
, desktop-file-utils
|
||||||
|
, fetchFromGitLab
|
||||||
|
, nix-update-script
|
||||||
|
, meson
|
||||||
|
, ninja
|
||||||
|
, gettext
|
||||||
|
, python3
|
||||||
|
, rustPlatform
|
||||||
|
, pkg-config
|
||||||
|
, glib
|
||||||
|
, libhandy
|
||||||
|
, gtk3
|
||||||
|
, dbus
|
||||||
|
, gst_all_1
|
||||||
|
, wrapGAppsHook
|
||||||
|
}:
|
||||||
|
|
||||||
|
stdenv.mkDerivation rec {
|
||||||
|
pname = "identity";
|
||||||
|
version = "0.1.3";
|
||||||
|
|
||||||
|
src = fetchFromGitLab {
|
||||||
|
domain = "gitlab.gnome.org";
|
||||||
|
owner = "YaLTeR";
|
||||||
|
repo = "identity";
|
||||||
|
rev = "v${version}";
|
||||||
|
sha256 = "sha256-LvBDzI8x42npiRSR3uNTYGuz7H7ClaUR9zp9rchpMyk=";
|
||||||
|
};
|
||||||
|
|
||||||
|
cargoDeps = rustPlatform.fetchCargoTarball {
|
||||||
|
inherit src;
|
||||||
|
name = "${pname}-${version}";
|
||||||
|
hash = "sha256-2xURbda1fIQr+nWPL5yilDBT7ji3uTHwhYKgL77vYek=";
|
||||||
|
};
|
||||||
|
|
||||||
|
nativeBuildInputs = [
|
||||||
|
desktop-file-utils
|
||||||
|
gettext
|
||||||
|
meson
|
||||||
|
ninja
|
||||||
|
pkg-config
|
||||||
|
python3
|
||||||
|
rustPlatform.rust.cargo
|
||||||
|
rustPlatform.cargoSetupHook
|
||||||
|
rustPlatform.rust.rustc
|
||||||
|
wrapGAppsHook
|
||||||
|
glib
|
||||||
|
];
|
||||||
|
|
||||||
|
buildInputs = [
|
||||||
|
dbus
|
||||||
|
glib
|
||||||
|
gst_all_1.gst-editing-services
|
||||||
|
gst_all_1.gst-plugins-bad
|
||||||
|
gst_all_1.gst-plugins-base
|
||||||
|
(gst_all_1.gst-plugins-good.override {
|
||||||
|
gtkSupport = true;
|
||||||
|
})
|
||||||
|
gst_all_1.gstreamer
|
||||||
|
gst_all_1.gst-devtools
|
||||||
|
gtk3
|
||||||
|
libhandy
|
||||||
|
];
|
||||||
|
|
||||||
|
postPatch = ''
|
||||||
|
patchShebangs build-aux/meson_post_install.py
|
||||||
|
'';
|
||||||
|
|
||||||
|
passthru = {
|
||||||
|
updateScript = nix-update-script {
|
||||||
|
attrPath = pname;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
postFixup = ''
|
||||||
|
substituteInPlace $out/share/applications/org.gnome.gitlab.YaLTeR.Identity.desktop --replace Icon=org.gnome.gitlab.YaLTeR.Identity Icon=$out/share/icons/hicolor/symbolic/apps/org.gnome.gitlab.YaLTeR.Identity-symbolic.svg
|
||||||
|
'';
|
||||||
|
}
|
17
packages/apps/neovim-gtk/build-noforce.patch
Normal file
17
packages/apps/neovim-gtk/build-noforce.patch
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
diff --git a/Makefile b/Makefile
|
||||||
|
index 73d0f2c..d27f387 100644
|
||||||
|
--- a/Makefile
|
||||||
|
+++ b/Makefile
|
||||||
|
@@ -7,10 +7,10 @@ run:
|
||||||
|
RUST_LOG=warn RUST_BACKTRACE=1 cargo run -- --no-fork
|
||||||
|
|
||||||
|
install: install-resources
|
||||||
|
- cargo install --path . --force --root $(DESTDIR)$(PREFIX)
|
||||||
|
+ cargo install --path . --root $(DESTDIR)$(PREFIX)
|
||||||
|
|
||||||
|
install-debug: install-resources
|
||||||
|
- cargo install --debug --path . --force --root $(DESTDIR)$(PREFIX)
|
||||||
|
+ cargo install --debug --path . --root $(DESTDIR)$(PREFIX)
|
||||||
|
|
||||||
|
install-resources:
|
||||||
|
mkdir -p $(DESTDIR)$(PREFIX)/share/nvim-gtk/
|
29
packages/apps/neovim-gtk/default.nix
Normal file
29
packages/apps/neovim-gtk/default.nix
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
{ rustPackages, fetchFromGitHub,
|
||||||
|
pkg-config, gnused,
|
||||||
|
gtk3, glib, cairo, pango
|
||||||
|
}:
|
||||||
|
rustPackages.rustPlatform.buildRustPackage {
|
||||||
|
name = "neovim-gtk-nightly";
|
||||||
|
src = fetchFromGitHub {
|
||||||
|
owner = "daa84";
|
||||||
|
repo = "neovim-gtk";
|
||||||
|
rev = "c03649276ee47caa9bc7beb68f6c800b8c97651a";
|
||||||
|
sha256 = "sha256-dqJACgCXHWaRwvGxnYDSTvhbyrUarw2o9yRxjj41Auw=";
|
||||||
|
};
|
||||||
|
cargoSha256 = "sha256-hcD+kWmtIQXXm1LisHwj24ttmxJxQ9GmJNezAztZR4c=";
|
||||||
|
nativeBuildInputs = [ pkg-config gnused ];
|
||||||
|
buildInputs = [
|
||||||
|
gtk3
|
||||||
|
glib
|
||||||
|
cairo
|
||||||
|
pango
|
||||||
|
];
|
||||||
|
patches = [
|
||||||
|
./build-noforce.patch
|
||||||
|
./popup-huge-padding.patch
|
||||||
|
];
|
||||||
|
buildPhase = "make install PREFIX=$out";
|
||||||
|
installPhase = ''
|
||||||
|
sed -i 's/Name=NeovimGtk/Name=Neovim GTK/g' $out/share/applications/*.desktop
|
||||||
|
'';
|
||||||
|
}
|
13
packages/apps/neovim-gtk/double-width-popups.patch
Normal file
13
packages/apps/neovim-gtk/double-width-popups.patch
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
diff --git a/src/shell.rs b/src/shell.rs
|
||||||
|
index c631762..7319c1d 100644
|
||||||
|
--- a/src/shell.rs
|
||||||
|
+++ b/src/shell.rs
|
||||||
|
@@ -1577,7 +1577,7 @@ impl State {
|
||||||
|
level_idx: level,
|
||||||
|
x,
|
||||||
|
y,
|
||||||
|
- width,
|
||||||
|
+ width: width*8,
|
||||||
|
height,
|
||||||
|
max_width: self.max_popup_width(),
|
||||||
|
};
|
13
packages/apps/neovim-gtk/popup-huge-padding.patch
Normal file
13
packages/apps/neovim-gtk/popup-huge-padding.patch
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
diff --git a/src/popup_menu.rs b/src/popup_menu.rs
|
||||||
|
index 0abb937..9adb7e6 100644
|
||||||
|
--- a/src/popup_menu.rs
|
||||||
|
+++ b/src/popup_menu.rs
|
||||||
|
@@ -100,7 +100,7 @@ impl State {
|
||||||
|
}
|
||||||
|
|
||||||
|
fn limit_column_widths(&self, ctx: &PopupMenuContext) {
|
||||||
|
- const DEFAULT_PADDING: i32 = 5;
|
||||||
|
+ const DEFAULT_PADDING: i32 = 30;
|
||||||
|
|
||||||
|
let layout = ctx.font_ctx.create_layout();
|
||||||
|
let kind_exists = ctx.menu_items.iter().any(|i| !i.kind.is_empty());
|
77
packages/apps/obfuscate/default.nix
Normal file
77
packages/apps/obfuscate/default.nix
Normal file
|
@ -0,0 +1,77 @@
|
||||||
|
{ lib, stdenv
|
||||||
|
, desktop-file-utils
|
||||||
|
, fetchFromGitLab
|
||||||
|
, nix-update-script
|
||||||
|
, meson
|
||||||
|
, ninja
|
||||||
|
, gettext
|
||||||
|
, python3
|
||||||
|
, rustPlatform
|
||||||
|
, pkg-config
|
||||||
|
, glib
|
||||||
|
, libadwaita
|
||||||
|
, gtk4
|
||||||
|
, dbus
|
||||||
|
, gst_all_1
|
||||||
|
, gdk-pixbuf
|
||||||
|
, wrapGAppsHook
|
||||||
|
}:
|
||||||
|
|
||||||
|
stdenv.mkDerivation rec {
|
||||||
|
pname = "obfuscate";
|
||||||
|
version = "0.0.4";
|
||||||
|
|
||||||
|
src = fetchFromGitLab {
|
||||||
|
domain = "gitlab.gnome.org";
|
||||||
|
owner = "World";
|
||||||
|
repo = "obfuscate";
|
||||||
|
rev = version;
|
||||||
|
sha256 = "sha256-P8Y2Eizn1BMZXuFjGMXF/3oAUzI8ZNTrnbLyU+V6uk4=";
|
||||||
|
};
|
||||||
|
|
||||||
|
cargoDeps = rustPlatform.fetchCargoTarball {
|
||||||
|
inherit src;
|
||||||
|
name = "${pname}-${version}";
|
||||||
|
hash = "sha256-eKXVN3PHgeLeG4qxh30VhyMX0FMOO/ZlZ8trUGIs2sc=";
|
||||||
|
};
|
||||||
|
|
||||||
|
nativeBuildInputs = [
|
||||||
|
desktop-file-utils
|
||||||
|
gettext
|
||||||
|
meson
|
||||||
|
ninja
|
||||||
|
pkg-config
|
||||||
|
python3
|
||||||
|
rustPlatform.rust.cargo
|
||||||
|
rustPlatform.cargoSetupHook
|
||||||
|
rustPlatform.rust.rustc
|
||||||
|
wrapGAppsHook
|
||||||
|
glib
|
||||||
|
];
|
||||||
|
|
||||||
|
buildInputs = [
|
||||||
|
dbus
|
||||||
|
gdk-pixbuf
|
||||||
|
glib
|
||||||
|
gst_all_1.gst-editing-services
|
||||||
|
gst_all_1.gst-plugins-bad
|
||||||
|
gst_all_1.gst-plugins-base
|
||||||
|
(gst_all_1.gst-plugins-good.override {
|
||||||
|
gtkSupport = true;
|
||||||
|
})
|
||||||
|
gst_all_1.gstreamer
|
||||||
|
gst_all_1.gst-devtools
|
||||||
|
gtk4
|
||||||
|
libadwaita
|
||||||
|
];
|
||||||
|
|
||||||
|
postPatch = ''
|
||||||
|
patchShebangs build-aux/meson_post_install.py
|
||||||
|
'';
|
||||||
|
|
||||||
|
passthru = {
|
||||||
|
updateScript = nix-update-script {
|
||||||
|
attrPath = pname;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
8
packages/data/misc/steam-metro-skin/default.nix
Normal file
8
packages/data/misc/steam-metro-skin/default.nix
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
{ fetchzip }:
|
||||||
|
|
||||||
|
fetchzip {
|
||||||
|
name = "metro-for-steam-4.4";
|
||||||
|
url =
|
||||||
|
"https://github.com/minischetti/metro-for-steam/archive/v4.4.zip";
|
||||||
|
sha256 = "sha256-E/hmOODf/aBAcc/RYueqMjQ+7SuvftfjYCVKD6CTX+U=";
|
||||||
|
}
|
|
@ -0,0 +1,7 @@
|
||||||
|
{ fetchurl }:
|
||||||
|
|
||||||
|
fetchurl {
|
||||||
|
url =
|
||||||
|
"https://export.privatevoid.net/Certificates/PRIVATEVOID.NET__Private_Void_Smart_Card_Authority-bundle-s12.pem";
|
||||||
|
sha256 = "3939eb6512e5675bb27028f9bf9892dbb1d1a60b014f4537f8d2b6180deece68";
|
||||||
|
}
|
8
packages/default.nix
Normal file
8
packages/default.nix
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
{ nixpkgs, inputs }:
|
||||||
|
let
|
||||||
|
patched-derivations = import ./patched-derivations.nix nixpkgs;
|
||||||
|
patched-inputs = import ./patched-inputs.nix inputs;
|
||||||
|
packages = import ./packages.nix nixpkgs;
|
||||||
|
in patched-derivations
|
||||||
|
// patched-inputs
|
||||||
|
// packages
|
95
packages/development/langservers/jdtls.nix
Normal file
95
packages/development/langservers/jdtls.nix
Normal file
|
@ -0,0 +1,95 @@
|
||||||
|
{ lib
|
||||||
|
, stdenv
|
||||||
|
, fetchurl
|
||||||
|
, makeWrapper
|
||||||
|
, jdk
|
||||||
|
}:
|
||||||
|
|
||||||
|
stdenv.mkDerivation rec {
|
||||||
|
pname = "jdt-language-server";
|
||||||
|
version = "0.67.0";
|
||||||
|
timestamp = "202012170459";
|
||||||
|
|
||||||
|
src = fetchurl {
|
||||||
|
url = "https://download.eclipse.org/jdtls/milestones/${version}/jdt-language-server-${version}-${timestamp}.tar.gz";
|
||||||
|
sha256 = "11qzwf2l737hdv1g7bfcrmdxcrl7g9z2k9nhy9lknlabmhq4mcdl";
|
||||||
|
};
|
||||||
|
|
||||||
|
sourceRoot = ".";
|
||||||
|
|
||||||
|
buildInputs = [
|
||||||
|
jdk
|
||||||
|
];
|
||||||
|
|
||||||
|
nativeBuildInputs = [
|
||||||
|
makeWrapper
|
||||||
|
];
|
||||||
|
|
||||||
|
installPhase =
|
||||||
|
let
|
||||||
|
# The application ships with config directories for linux and mac
|
||||||
|
configDir = if stdenv.isDarwin then "config_mac" else "config_linux";
|
||||||
|
# The application will store it's data here. Note especially the escaping so
|
||||||
|
# that the env vars are interpreted at runtime and not during installPhase.
|
||||||
|
runtimePath = "\\\${XDG_CACHE_HOME:-\\$HOME/.cache}/jdt-language-server";
|
||||||
|
in
|
||||||
|
''
|
||||||
|
# Copy jars
|
||||||
|
install -D -t $out/share/java/plugins/ plugins/*.jar
|
||||||
|
# Copy config directories for linux and mac
|
||||||
|
install -Dm 444 -t $out/share/config ${configDir}/*
|
||||||
|
# Get latest version of launcher jar
|
||||||
|
# e.g. org.eclipse.equinox.launcher_1.5.800.v20200727-1323.jar
|
||||||
|
launcher="$(ls $out/share/java/plugins/org.eclipse.equinox.launcher_* | sort -V | tail -n1)"
|
||||||
|
# The wrapper script will create a directory in the user's cache, copy in the config
|
||||||
|
# files since this dir can't be read-only, and by default use this as the runtime dir.
|
||||||
|
#
|
||||||
|
# The following options are required as per the upstream documentation:
|
||||||
|
#
|
||||||
|
# -Declipse.application=org.eclipse.jdt.ls.core.id1
|
||||||
|
# -Dosgi.bundles.defaultStartLevel=4
|
||||||
|
# -Declipse.product=org.eclipse.jdt.ls.core.product
|
||||||
|
# -noverify
|
||||||
|
# --add-modules=ALL-SYSTEM
|
||||||
|
# --add-opens java.base/java.util=ALL-UNNAMED
|
||||||
|
# --add-opens java.base/java.lang=ALL-UNNAMED
|
||||||
|
#
|
||||||
|
# Other options which the user may change:
|
||||||
|
#
|
||||||
|
# -Dlog.level:
|
||||||
|
# Log level.
|
||||||
|
# This can be overidden by setting JAVA_OPTS.
|
||||||
|
# -configuration:
|
||||||
|
# The application will read the configuration from this directory but also needs
|
||||||
|
# to be able to write here (hence mode 17777).
|
||||||
|
# This can be overidden by specifying -configuration to the wrapper.
|
||||||
|
# -data:
|
||||||
|
# The application stores runtime data here. We set this to <cache-dir>/$PWD
|
||||||
|
# so that projects don't collide with each other.
|
||||||
|
# This can be overidden by specifying -configuration to the wrapper.
|
||||||
|
#
|
||||||
|
# Java options, such as -Xms and Xmx can be specified by setting JAVA_OPTS.
|
||||||
|
makeWrapper ${jdk}/bin/java $out/bin/jdt-language-server \
|
||||||
|
--run "mkdir -p ${runtimePath}" \
|
||||||
|
--run "install -Dm 1777 -t ${runtimePath}/config $out/share/config/*" \
|
||||||
|
--add-flags "-Declipse.application=org.eclipse.jdt.ls.core.id1" \
|
||||||
|
--add-flags "-Dosgi.bundles.defaultStartLevel=4" \
|
||||||
|
--add-flags "-Declipse.product=org.eclipse.jdt.ls.core.product" \
|
||||||
|
--add-flags "-Dlog.level=ALL" \
|
||||||
|
--add-flags "-noverify" \
|
||||||
|
--add-flags "\$JAVA_OPTS" \
|
||||||
|
--add-flags "-jar $launcher" \
|
||||||
|
--add-flags "--add-modules=ALL-SYSTEM" \
|
||||||
|
--add-flags "--add-opens java.base/java.util=ALL-UNNAMED" \
|
||||||
|
--add-flags "--add-opens java.base/java.lang=ALL-UNNAMED" \
|
||||||
|
--add-flags "-configuration \"${runtimePath}/config\"" \
|
||||||
|
--add-flags "-data \"${runtimePath}/data\$PWD\""
|
||||||
|
'';
|
||||||
|
|
||||||
|
meta = with lib; {
|
||||||
|
homepage = "https://github.com/eclipse/eclipse.jdt.ls";
|
||||||
|
description = "Java language server";
|
||||||
|
license = licenses.epl20;
|
||||||
|
maintainers = with maintainers; [ matt-snider ];
|
||||||
|
};
|
||||||
|
}
|
27
packages/lib/tools.nix
Normal file
27
packages/lib/tools.nix
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
rec {
|
||||||
|
dirfilter = type: path:
|
||||||
|
(let root = builtins.readDir path;
|
||||||
|
in builtins.filter (x: builtins.getAttr x root == type)
|
||||||
|
(builtins.attrNames root));
|
||||||
|
|
||||||
|
absolutify = path: ../../. + ("/" + path);
|
||||||
|
mkpatchlist = pkg:
|
||||||
|
map (patch: absolutify (builtins.concatStringsSep "/" [ pkg patch ]))
|
||||||
|
(dirfilter "regular" (absolutify pkg));
|
||||||
|
|
||||||
|
patch = super: patchdir:
|
||||||
|
super.overrideAttrs
|
||||||
|
(attrs: { patches = (attrs.patches or [ ]) ++ (mkpatchlist patchdir); });
|
||||||
|
|
||||||
|
patch-rename = super: pname: patchdir:
|
||||||
|
super.overrideAttrs (attrs: {
|
||||||
|
patches = (attrs.patches or [ ]) ++ (mkpatchlist patchdir);
|
||||||
|
inherit pname;
|
||||||
|
});
|
||||||
|
|
||||||
|
patch-rename-direct = super: renameWith: patchdir:
|
||||||
|
super.overrideAttrs (attrs: {
|
||||||
|
patches = (attrs.patches or [ ]) ++ (mkpatchlist patchdir);
|
||||||
|
name = renameWith attrs;
|
||||||
|
});
|
||||||
|
}
|
|
@ -0,0 +1,72 @@
|
||||||
|
From 06370f8afc1a00da62757137f2f739c531ccfdfc Mon Sep 17 00:00:00 2001
|
||||||
|
From: Tiago Carvalho <sugoiuguu@tfwno.gf>
|
||||||
|
Date: Sat, 5 Feb 2022 15:15:24 +0000
|
||||||
|
Subject: [PATCH 1/3] Lain ipfs bootstrap nodes
|
||||||
|
|
||||||
|
---
|
||||||
|
p2p/node.go | 20 ++++++++++++++------
|
||||||
|
1 file changed, 14 insertions(+), 6 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/p2p/node.go b/p2p/node.go
|
||||||
|
index 65d13c8..736101a 100644
|
||||||
|
--- a/p2p/node.go
|
||||||
|
+++ b/p2p/node.go
|
||||||
|
@@ -4,6 +4,7 @@ import (
|
||||||
|
"context"
|
||||||
|
"errors"
|
||||||
|
"fmt"
|
||||||
|
+ "os"
|
||||||
|
"sync"
|
||||||
|
|
||||||
|
"github.com/ipfs/go-datastore"
|
||||||
|
@@ -12,6 +13,7 @@ import (
|
||||||
|
"github.com/libp2p/go-libp2p-core/host"
|
||||||
|
"github.com/libp2p/go-libp2p-core/network"
|
||||||
|
"github.com/libp2p/go-libp2p-core/peer"
|
||||||
|
+ "github.com/libp2p/go-libp2p-core/pnet"
|
||||||
|
dht "github.com/libp2p/go-libp2p-kad-dht"
|
||||||
|
libp2pquic "github.com/libp2p/go-libp2p-quic-transport"
|
||||||
|
"github.com/libp2p/go-tcp-transport"
|
||||||
|
@@ -29,14 +31,22 @@ func CreateNode(ctx context.Context, inputKey string, port int, handler network.
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
+ swarmKey, err := os.Open(os.Getenv("HYPRSPACE_SWARM_KEY"))
|
||||||
|
+ if err != nil {
|
||||||
|
+ return
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
ip6quic := fmt.Sprintf("/ip6/::/udp/%d/quic", port)
|
||||||
|
ip4quic := fmt.Sprintf("/ip4/0.0.0.0/udp/%d/quic", port)
|
||||||
|
|
||||||
|
ip6tcp := fmt.Sprintf("/ip6/::/tcp/%d", port)
|
||||||
|
ip4tcp := fmt.Sprintf("/ip4/0.0.0.0/tcp/%d", port)
|
||||||
|
|
||||||
|
+ key, _ := pnet.DecodeV1PSK(swarmKey)
|
||||||
|
+
|
||||||
|
// Create libp2p node
|
||||||
|
node, err = libp2p.New(
|
||||||
|
+ libp2p.PrivateNetwork(key),
|
||||||
|
libp2p.ListenAddrStrings(ip6quic, ip4quic, ip6tcp, ip4tcp),
|
||||||
|
libp2p.Identity(privateKey),
|
||||||
|
libp2p.DefaultSecurity,
|
||||||
|
@@ -58,12 +68,10 @@ func CreateNode(ctx context.Context, inputKey string, port int, handler network.
|
||||||
|
|
||||||
|
// Define Bootstrap Nodes.
|
||||||
|
peers := []string{
|
||||||
|
- "/dnsaddr/bootstrap.libp2p.io/p2p/QmcZf59bWwK5XFi76CZX8cbJ4BhTzzA3gU1ZjYZcYW3dwt",
|
||||||
|
- "/ip4/104.131.131.82/tcp/4001/p2p/QmaCpDMGvV2BGHeYERUEnRQAwe3N8SzbUtfsmvsqQLuvuJ",
|
||||||
|
- "/ip4/104.131.131.82/udp/4001/quic/p2p/QmaCpDMGvV2BGHeYERUEnRQAwe3N8SzbUtfsmvsqQLuvuJ",
|
||||||
|
- "/dnsaddr/bootstrap.libp2p.io/p2p/QmNnooDu7bfjPFoTZYxMNLWUQJyrVwtbZg5gBMjTezGAJN",
|
||||||
|
- "/dnsaddr/bootstrap.libp2p.io/p2p/QmQCU2EcMqAqQPR2i9bChDtGNJchTbq5TbXJJ16u19uLTa",
|
||||||
|
- "/dnsaddr/bootstrap.libp2p.io/p2p/QmbLHAnMoJPWSCR5Zhtx6BHJX9KiKNN6tpvbUcqanj75Nb",
|
||||||
|
+ "/ip4/168.235.67.108/tcp/4001/p2p/QmRMA5pWXtfuW1y5w2t9gYxrDDD6bPRLKdWAYnHTeCxZMm",
|
||||||
|
+ "/ip4/95.216.8.12/tcp/4001/p2p/Qmd7QHZU8UjfYdwmjmq1SBh9pvER9AwHpfwQvnvNo3HBBo",
|
||||||
|
+ "/ip6/2001:41d0:800:1402::3f16:3fb5/tcp/4001/p2p/12D3KooWDUgNsoLVauCDpRAo54mc4whoBudgeXQnZZK2iVYhBLCN",
|
||||||
|
+ "/ip6/2001:818:da65:e400:a553:fbc1:f0b1:5743/tcp/4001/p2p/12D3KooWC1RZxLvAeEFNTZWk1FWc1sZZ3yemF4FNNRYa3X854KJ8",
|
||||||
|
}
|
||||||
|
|
||||||
|
// Convert Bootstap Nodes into usable addresses.
|
||||||
|
--
|
||||||
|
2.34.1
|
||||||
|
|
|
@ -0,0 +1,48 @@
|
||||||
|
From 743c2cc62daa48bbdcce038ad21805b906e8ddaf Mon Sep 17 00:00:00 2001
|
||||||
|
From: Tiago Carvalho <sugoiuguu@tfwno.gf>
|
||||||
|
Date: Sat, 5 Feb 2022 15:16:33 +0000
|
||||||
|
Subject: [PATCH 2/3] Remove quic transport for Lain ipfs
|
||||||
|
|
||||||
|
---
|
||||||
|
p2p/node.go | 7 +------
|
||||||
|
1 file changed, 1 insertion(+), 6 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/p2p/node.go b/p2p/node.go
|
||||||
|
index 736101a..2f86317 100644
|
||||||
|
--- a/p2p/node.go
|
||||||
|
+++ b/p2p/node.go
|
||||||
|
@@ -15,7 +15,6 @@ import (
|
||||||
|
"github.com/libp2p/go-libp2p-core/peer"
|
||||||
|
"github.com/libp2p/go-libp2p-core/pnet"
|
||||||
|
dht "github.com/libp2p/go-libp2p-kad-dht"
|
||||||
|
- libp2pquic "github.com/libp2p/go-libp2p-quic-transport"
|
||||||
|
"github.com/libp2p/go-tcp-transport"
|
||||||
|
ma "github.com/multiformats/go-multiaddr"
|
||||||
|
)
|
||||||
|
@@ -36,9 +35,6 @@ func CreateNode(ctx context.Context, inputKey string, port int, handler network.
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
- ip6quic := fmt.Sprintf("/ip6/::/udp/%d/quic", port)
|
||||||
|
- ip4quic := fmt.Sprintf("/ip4/0.0.0.0/udp/%d/quic", port)
|
||||||
|
-
|
||||||
|
ip6tcp := fmt.Sprintf("/ip6/::/tcp/%d", port)
|
||||||
|
ip4tcp := fmt.Sprintf("/ip4/0.0.0.0/tcp/%d", port)
|
||||||
|
|
||||||
|
@@ -47,12 +43,11 @@ func CreateNode(ctx context.Context, inputKey string, port int, handler network.
|
||||||
|
// Create libp2p node
|
||||||
|
node, err = libp2p.New(
|
||||||
|
libp2p.PrivateNetwork(key),
|
||||||
|
- libp2p.ListenAddrStrings(ip6quic, ip4quic, ip6tcp, ip4tcp),
|
||||||
|
+ libp2p.ListenAddrStrings(ip6tcp, ip4tcp),
|
||||||
|
libp2p.Identity(privateKey),
|
||||||
|
libp2p.DefaultSecurity,
|
||||||
|
libp2p.NATPortMap(),
|
||||||
|
libp2p.DefaultMuxers,
|
||||||
|
- libp2p.Transport(libp2pquic.NewTransport),
|
||||||
|
libp2p.Transport(tcp.NewTCPTransport),
|
||||||
|
libp2p.FallbackDefaults,
|
||||||
|
)
|
||||||
|
--
|
||||||
|
2.34.1
|
||||||
|
|
|
@ -0,0 +1,24 @@
|
||||||
|
From 377b0a8f56b04e693a4d4c7a0b9bb674c63c5bba Mon Sep 17 00:00:00 2001
|
||||||
|
From: Tiago Carvalho <sugoiuguu@tfwno.gf>
|
||||||
|
Date: Sat, 5 Feb 2022 15:16:45 +0000
|
||||||
|
Subject: [PATCH 3/3] Remove dep from go.mod
|
||||||
|
|
||||||
|
---
|
||||||
|
go.mod | 1 -
|
||||||
|
1 file changed, 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/go.mod b/go.mod
|
||||||
|
index 672c2fc..1092553 100644
|
||||||
|
--- a/go.mod
|
||||||
|
+++ b/go.mod
|
||||||
|
@@ -11,7 +11,6 @@ require (
|
||||||
|
github.com/libp2p/go-libp2p v0.17.0
|
||||||
|
github.com/libp2p/go-libp2p-core v0.13.0
|
||||||
|
github.com/libp2p/go-libp2p-kad-dht v0.15.0
|
||||||
|
- github.com/libp2p/go-libp2p-quic-transport v0.15.2
|
||||||
|
github.com/libp2p/go-tcp-transport v0.4.0
|
||||||
|
github.com/multiformats/go-multiaddr v0.4.1
|
||||||
|
github.com/nxadm/tail v1.4.8
|
||||||
|
--
|
||||||
|
2.34.1
|
||||||
|
|
31
packages/networking/hyprspace/default.nix
Normal file
31
packages/networking/hyprspace/default.nix
Normal file
|
@ -0,0 +1,31 @@
|
||||||
|
{ lib, stdenv, buildGoModule, fetchFromGitHub, iproute2mac }:
|
||||||
|
|
||||||
|
buildGoModule rec {
|
||||||
|
pname = "hyprspace";
|
||||||
|
version = "0.2.2";
|
||||||
|
|
||||||
|
propagatedBuildInputs = lib.optional stdenv.isDarwin iproute2mac;
|
||||||
|
|
||||||
|
patches = [
|
||||||
|
./0001-Lain-ipfs-bootstrap-nodes.patch
|
||||||
|
./0002-Remove-quic-transport-for-Lain-ipfs.patch
|
||||||
|
./0003-Remove-dep-from-go.mod.patch
|
||||||
|
];
|
||||||
|
|
||||||
|
src = fetchFromGitHub {
|
||||||
|
owner = pname;
|
||||||
|
repo = pname;
|
||||||
|
rev = "v${version}";
|
||||||
|
sha256 = "sha256-UlIQCy4moW58tQ1dqxrPsU5LN1Bs/Jy5X+2CEmXdYIk=";
|
||||||
|
};
|
||||||
|
|
||||||
|
vendorSha256 = "sha256-8j9M8LrcqiPShCCNOmmJoY6wclHRiX2xOJH/wvlwvwY=";
|
||||||
|
|
||||||
|
meta = with lib; {
|
||||||
|
description = "A Lightweight VPN Built on top of Libp2p for Truly Distributed Networks.";
|
||||||
|
homepage = "https://github.com/hyprspace/hyprspace";
|
||||||
|
license = licenses.asl20;
|
||||||
|
maintainers = with maintainers; [ yusdacra ];
|
||||||
|
platforms = platforms.linux ++ platforms.darwin;
|
||||||
|
};
|
||||||
|
}
|
17
packages/packages.nix
Normal file
17
packages/packages.nix
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
pkgs: {
|
||||||
|
privatevoid-smart-card-ca-bundle = pkgs.callPackage ./data/privatevoid-smart-card-certificate-authority-bundle.nix { };
|
||||||
|
|
||||||
|
jdtls = pkgs.callPackage ./development/langservers/jdtls.nix { };
|
||||||
|
|
||||||
|
doom-one-vim = pkgs.callPackage ./vim-plugins/doom-one-vim.nix { };
|
||||||
|
|
||||||
|
hyprspace = pkgs.callPackage ./networking/hyprspace { iproute2mac = null; };
|
||||||
|
|
||||||
|
identity = pkgs.callPackage ./apps/identity { };
|
||||||
|
|
||||||
|
obfuscate = pkgs.callPackage ./apps/obfuscate { };
|
||||||
|
|
||||||
|
neovim-gtk = pkgs.callPackage ./apps/neovim-gtk { };
|
||||||
|
|
||||||
|
steam-metro-skin = import ./data/misc/steam-metro-skin { inherit (pkgs) fetchzip; };
|
||||||
|
}
|
63
packages/patched-derivations.nix
Normal file
63
packages/patched-derivations.nix
Normal file
|
@ -0,0 +1,63 @@
|
||||||
|
let
|
||||||
|
tools = import ./lib/tools.nix;
|
||||||
|
patch' = super: tools.patch super "patches/base/${super.pname}";
|
||||||
|
in with tools;
|
||||||
|
super: rec {
|
||||||
|
kerberized-bind = super.bind.overrideAttrs (attrs: {
|
||||||
|
configureFlags = attrs.configureFlags ++ [ "--with-gssapi=${super.krb5.dev}" ];
|
||||||
|
buildInputs = attrs.buildInputs ++ [ super.krb5 ];
|
||||||
|
});
|
||||||
|
kerberized-dnsutils = kerberized-bind.dnsutils;
|
||||||
|
kerberized-dig = kerberized-bind.dnsutils;
|
||||||
|
|
||||||
|
ddcci-driver-with-global-control = patch super.linuxPackages.ddcci-driver "patches/kmods/ddcci-driver";
|
||||||
|
|
||||||
|
doas-interactive = patch-rename super.doas "doas-interactive" "patches/base/doas";
|
||||||
|
|
||||||
|
lain-ipfs = patch-rename super.ipfs "lain-ipfs" "patches/base/ipfs";
|
||||||
|
|
||||||
|
glib = patch' super.glib;
|
||||||
|
|
||||||
|
gnome-control-center = ((patch' super.gnome.gnome-control-center).override {
|
||||||
|
cheese = null;
|
||||||
|
}).overrideAttrs (_: {
|
||||||
|
mesonFlags = [ "-Dcheese=false" ];
|
||||||
|
});
|
||||||
|
|
||||||
|
kooha = super.kooha.overrideAttrs (_: {
|
||||||
|
postInstall = ''
|
||||||
|
substituteInPlace $out/share/applications/io.github.seadve.Kooha.desktop \
|
||||||
|
--replace "=Kooha" "=Screen Recorder"
|
||||||
|
'';
|
||||||
|
});
|
||||||
|
|
||||||
|
nautilus = (patch' super.gnome.nautilus).overrideAttrs (attrs: {
|
||||||
|
preFixup = with super;
|
||||||
|
let py = (python3.withPackages (ps: with ps; [ ps.pygobject3 ]));
|
||||||
|
in attrs.preFixup + ''
|
||||||
|
gappsWrapperArgs+=(
|
||||||
|
--prefix PYTHONPATH : ${py}/${py.sitePackages}
|
||||||
|
)
|
||||||
|
'';
|
||||||
|
});
|
||||||
|
|
||||||
|
oni2 = super.oni2.overrideAttrs (attrs: {
|
||||||
|
nativeBuildInputs = attrs.nativeBuildInputs ++ [
|
||||||
|
super.python3
|
||||||
|
];
|
||||||
|
});
|
||||||
|
|
||||||
|
terminus_font_fancy = super.terminus_font.overrideAttrs (attrs: {
|
||||||
|
patches = (attrs.patches or [ ]) ++ [ "alt/td1.diff" "alt/ll2.diff" ];
|
||||||
|
});
|
||||||
|
|
||||||
|
nerdfonts-terminus = super.nerdfonts.override { fonts = [ "Terminus" ]; };
|
||||||
|
|
||||||
|
vte-high-refresh-rate = patch' super.vte;
|
||||||
|
|
||||||
|
tilix-high-refresh-rate = super.tilix.override { gtkd = super.gtkd.override { vte = vte-high-refresh-rate; }; };
|
||||||
|
|
||||||
|
webkitgtk = patch' super.webkitgtk;
|
||||||
|
|
||||||
|
webkitgtk_4_1 = patch' super.webkitgtk_4_1;
|
||||||
|
}
|
9
packages/patched-inputs.nix
Normal file
9
packages/patched-inputs.nix
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
let tools = import ./lib/tools.nix;
|
||||||
|
in with tools;
|
||||||
|
inputs: rec {
|
||||||
|
nix-super = inputs.nix-super.defaultPackage.x86_64-linux;
|
||||||
|
|
||||||
|
deploy-rs = inputs.deploy-rs.packages.x86_64-linux.deploy-rs;
|
||||||
|
|
||||||
|
agenix = inputs.agenix.packages.x86_64-linux.agenix.override { nix = nix-super; };
|
||||||
|
}
|
14
packages/vim-plugins/doom-one-vim.nix
Normal file
14
packages/vim-plugins/doom-one-vim.nix
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
{ vimUtils, fetchFromGitHub }:
|
||||||
|
|
||||||
|
vimUtils.buildVimPlugin {
|
||||||
|
pname = "doom-one-vim";
|
||||||
|
version = "2021-04-23";
|
||||||
|
src = fetchFromGitHub {
|
||||||
|
owner = "romgrk";
|
||||||
|
repo = "doom-one.vim";
|
||||||
|
rev = "051cd6db324cd38e3b2f96230454ebe947fe12dd";
|
||||||
|
sha256 = "sha256-hdeVcvtnG7ATgly870DVb/bgf6bYmFkW0IHrPe0ts6E=";
|
||||||
|
};
|
||||||
|
patches = [ ./pango-bg.patch ];
|
||||||
|
meta.homepage = "https://github.com/romgrk/doom-one.vim/";
|
||||||
|
}
|
38
packages/vim-plugins/pango-bg.patch
Normal file
38
packages/vim-plugins/pango-bg.patch
Normal file
|
@ -0,0 +1,38 @@
|
||||||
|
diff --git a/colors/doom-one.vim b/colors/doom-one.vim
|
||||||
|
index 6ef4e69..2a65a6f 100644
|
||||||
|
--- a/colors/doom-one.vim
|
||||||
|
+++ b/colors/doom-one.vim
|
||||||
|
@@ -47,7 +47,7 @@ endfunc
|
||||||
|
" Colors {{{
|
||||||
|
|
||||||
|
let s:base0 = '#1B2229'
|
||||||
|
-let s:base1 = '#1c1f24'
|
||||||
|
+let s:base1 = '#181818'
|
||||||
|
let s:base2 = '#202328'
|
||||||
|
let s:base3 = '#23272e'
|
||||||
|
let s:base4 = '#3f444a'
|
||||||
|
@@ -73,15 +73,15 @@ let s:white = '#efefef'
|
||||||
|
|
||||||
|
let s:green_alt = '#799033'
|
||||||
|
|
||||||
|
-let s:bg = '#282c34'
|
||||||
|
-let s:bg_alt = '#21242b'
|
||||||
|
-let s:bg_highlight = '#2E323C'
|
||||||
|
-let s:bg_popup = '#3E4556'
|
||||||
|
-let s:bg_widget = s:bg
|
||||||
|
-let s:bg_statusline = s:bg_popup
|
||||||
|
-let s:bg_visual = color#Lighten(s:base4, 0.3)
|
||||||
|
-let s:bg_selection = s:dark_blue
|
||||||
|
-let s:bg_highlighted = '#4A4A45'
|
||||||
|
+let s:bg = '#1a1a1a'
|
||||||
|
+let s:bg_alt = '#202020'
|
||||||
|
+let s:bg_highlight = '#303030'
|
||||||
|
+let s:bg_popup = '#1a1a1a'
|
||||||
|
+let s:bg_widget = '#1a1a1a'
|
||||||
|
+let s:bg_statusline = '#1a1a1a'
|
||||||
|
+let s:bg_visual = '#404040'
|
||||||
|
+let s:bg_selection = '#404040'
|
||||||
|
+let s:bg_highlighted = '#404040'
|
||||||
|
|
||||||
|
let s:fg = '#bbc2cf'
|
||||||
|
let s:fg_alt = '#5B6268'
|
99
patches/base/doas/doas-interactive.patch
Normal file
99
patches/base/doas/doas-interactive.patch
Normal file
|
@ -0,0 +1,99 @@
|
||||||
|
diff --git a/doas.1 b/doas.1
|
||||||
|
index 7360be3..009ba1d 100644
|
||||||
|
--- a/doas.1
|
||||||
|
+++ b/doas.1
|
||||||
|
@@ -97,6 +97,10 @@ Execute the shell from
|
||||||
|
.Ev SHELL
|
||||||
|
or
|
||||||
|
.Pa /etc/passwd .
|
||||||
|
+.It Fl i
|
||||||
|
+Execute the shell from the target's
|
||||||
|
+.Pa /etc/passwd
|
||||||
|
+entry.
|
||||||
|
.It Fl u Ar user
|
||||||
|
Execute the command as
|
||||||
|
.Ar user .
|
||||||
|
diff --git a/doas.c b/doas.c
|
||||||
|
index e253905..e9a6cfb 100644
|
||||||
|
--- a/doas.c
|
||||||
|
+++ b/doas.c
|
||||||
|
@@ -37,7 +37,7 @@
|
||||||
|
static void __dead
|
||||||
|
usage(void)
|
||||||
|
{
|
||||||
|
- fprintf(stderr, "usage: doas [-Lns] [-C config] [-u user]"
|
||||||
|
+ fprintf(stderr, "usage: doas [-Lnsi] [-C config] [-u user]"
|
||||||
|
" command [args]\n");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
@@ -250,6 +250,7 @@ main(int argc, char **argv)
|
||||||
|
int ngroups;
|
||||||
|
int i, ch, rv;
|
||||||
|
int sflag = 0;
|
||||||
|
+ int iflag = 0;
|
||||||
|
int nflag = 0;
|
||||||
|
char cwdpath[PATH_MAX];
|
||||||
|
const char *cwd;
|
||||||
|
@@ -261,7 +262,7 @@ main(int argc, char **argv)
|
||||||
|
|
||||||
|
uid = getuid();
|
||||||
|
|
||||||
|
- while ((ch = getopt(argc, argv, "+C:Lnsu:")) != -1) {
|
||||||
|
+ while ((ch = getopt(argc, argv, "+C:Lnsiu:")) != -1) {
|
||||||
|
switch (ch) {
|
||||||
|
case 'C':
|
||||||
|
confpath = optarg;
|
||||||
|
@@ -282,6 +283,9 @@ main(int argc, char **argv)
|
||||||
|
case 's':
|
||||||
|
sflag = 1;
|
||||||
|
break;
|
||||||
|
+ case 'i':
|
||||||
|
+ iflag = 1;
|
||||||
|
+ break;
|
||||||
|
default:
|
||||||
|
usage();
|
||||||
|
break;
|
||||||
|
@@ -291,9 +295,9 @@ main(int argc, char **argv)
|
||||||
|
argc -= optind;
|
||||||
|
|
||||||
|
if (confpath) {
|
||||||
|
- if (sflag)
|
||||||
|
+ if (sflag || iflag)
|
||||||
|
usage();
|
||||||
|
- } else if ((!sflag && !argc) || (sflag && argc))
|
||||||
|
+ } else if ((!sflag && !iflag && !argc) || (sflag && argc) || (sflag && iflag) || (iflag && argc))
|
||||||
|
usage();
|
||||||
|
|
||||||
|
rv = mygetpwuid_r(uid, &mypwstore, &mypw);
|
||||||
|
@@ -306,7 +310,17 @@ main(int argc, char **argv)
|
||||||
|
err(1, "can't get groups");
|
||||||
|
groups[ngroups++] = getgid();
|
||||||
|
|
||||||
|
- if (sflag) {
|
||||||
|
+ rv = mygetpwuid_r(target, &targpwstore, &targpw);
|
||||||
|
+ if (rv != 0)
|
||||||
|
+ err(1, "getpwuid_r failed");
|
||||||
|
+ if (targpw == NULL)
|
||||||
|
+ errx(1, "no passwd entry for target");
|
||||||
|
+
|
||||||
|
+ if (iflag) {
|
||||||
|
+ shargv[0] = targpw->pw_shell;
|
||||||
|
+ argv = shargv;
|
||||||
|
+ argc = 1;
|
||||||
|
+ } else if (sflag) {
|
||||||
|
sh = getenv("SHELL");
|
||||||
|
if (sh == NULL || *sh == '\0') {
|
||||||
|
shargv[0] = mypw->pw_shell;
|
||||||
|
@@ -368,12 +382,6 @@ main(int argc, char **argv)
|
||||||
|
err(1, "failed to set PATH '%s'", safepath);
|
||||||
|
}
|
||||||
|
|
||||||
|
- rv = mygetpwuid_r(target, &targpwstore, &targpw);
|
||||||
|
- if (rv != 0)
|
||||||
|
- err(1, "getpwuid_r failed");
|
||||||
|
- if (targpw == NULL)
|
||||||
|
- errx(1, "no passwd entry for target");
|
||||||
|
-
|
||||||
|
#if defined(USE_PAM)
|
||||||
|
pamauth(targpw->pw_name, mypw->pw_name, !nflag, rule->options & NOPASS,
|
||||||
|
rule->options & PERSIST);
|
102
patches/base/glib/glib-appinfo-watch.patch
Normal file
102
patches/base/glib/glib-appinfo-watch.patch
Normal file
|
@ -0,0 +1,102 @@
|
||||||
|
This patch lets GLib's GDesktopAppInfo API watch and notice changes
|
||||||
|
to the Nix user and system profiles. That way, the list of available
|
||||||
|
applications shown by the desktop environment is immediately updated
|
||||||
|
when the user installs or removes any
|
||||||
|
(see <https://issues.guix.gnu.org/35594>).
|
||||||
|
|
||||||
|
It does so by monitoring /nix/var/nix/profiles (for changes to the system
|
||||||
|
profile) and /nix/var/nix/profiles/per-user/USER (for changes to the user
|
||||||
|
profile) as well as /etc/profiles/per-user (for chanes to the user
|
||||||
|
environment profile) and crawling their share/applications sub-directory when
|
||||||
|
changes happen.
|
||||||
|
|
||||||
|
diff --git a/gio/gdesktopappinfo.c b/gio/gdesktopappinfo.c
|
||||||
|
index f1e2fdd..095c110 100644
|
||||||
|
--- a/gio/gdesktopappinfo.c
|
||||||
|
+++ b/gio/gdesktopappinfo.c
|
||||||
|
@@ -148,6 +148,7 @@ typedef struct
|
||||||
|
gchar *alternatively_watching;
|
||||||
|
gboolean is_config;
|
||||||
|
gboolean is_setup;
|
||||||
|
+ gchar *nix_profile_watch_dir;
|
||||||
|
GFileMonitor *monitor;
|
||||||
|
GHashTable *app_names;
|
||||||
|
GHashTable *mime_tweaks;
|
||||||
|
@@ -180,6 +181,7 @@ desktop_file_dir_unref (DesktopFileDir *dir)
|
||||||
|
{
|
||||||
|
desktop_file_dir_reset (dir);
|
||||||
|
g_free (dir->path);
|
||||||
|
+ g_free (dir->nix_profile_watch_dir);
|
||||||
|
g_free (dir);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@@ -204,6 +206,14 @@ desktop_file_dir_get_alternative_dir (DesktopFileDir *dir)
|
||||||
|
{
|
||||||
|
gchar *parent;
|
||||||
|
|
||||||
|
+ /* If DIR is a profile, watch the specified directory--e.g.,
|
||||||
|
+ * /nix/var/nix/profiles/per-user/$USER/ for the user profile. Do not watch
|
||||||
|
+ * ~/.nix-profile or /run/current-system/sw because GFileMonitor does
|
||||||
|
+ * not pass IN_DONT_FOLLOW and thus cannot notice any change.
|
||||||
|
+ * /etc/profiles/per-user is monitored directly for the same reason. */
|
||||||
|
+ if (dir->nix_profile_watch_dir != NULL)
|
||||||
|
+ return g_strdup (dir->nix_profile_watch_dir);
|
||||||
|
+
|
||||||
|
/* If the directory itself exists then we need no alternative. */
|
||||||
|
if (g_access (dir->path, R_OK | X_OK) == 0)
|
||||||
|
return NULL;
|
||||||
|
@@ -249,11 +258,11 @@ desktop_file_dir_changed (GFileMonitor *monitor,
|
||||||
|
*
|
||||||
|
* If this is a notification for a parent directory (because the
|
||||||
|
* desktop directory didn't exist) then we shouldn't fire the signal
|
||||||
|
- * unless something actually changed.
|
||||||
|
+ * unless something actually changed or it's part of a Nix profile.
|
||||||
|
*/
|
||||||
|
g_mutex_lock (&desktop_file_dir_lock);
|
||||||
|
|
||||||
|
- if (dir->alternatively_watching)
|
||||||
|
+ if (dir->alternatively_watching && dir->nix_profile_watch_dir == NULL)
|
||||||
|
{
|
||||||
|
gchar *alternative_dir;
|
||||||
|
|
||||||
|
@@ -1555,6 +1564,40 @@ desktop_file_dirs_lock (void)
|
||||||
|
for (i = 0; dirs[i]; i++)
|
||||||
|
g_ptr_array_add (desktop_file_dirs, desktop_file_dir_new (dirs[i]));
|
||||||
|
|
||||||
|
+ {
|
||||||
|
+ /* Monitor the system and user profile under /nix/var/nix/profiles and
|
||||||
|
+ * treat modifications to them as if they were modifications to their
|
||||||
|
+ * /share sub-directory. */
|
||||||
|
+ const gchar *user;
|
||||||
|
+ DesktopFileDir *system_profile_dir, *user_profile_dir, *user_env_dir;
|
||||||
|
+
|
||||||
|
+ system_profile_dir =
|
||||||
|
+ desktop_file_dir_new ("/nix/var/nix/profiles/system/sw/share");
|
||||||
|
+ system_profile_dir->nix_profile_watch_dir = g_strdup ("/nix/var/nix/profiles");
|
||||||
|
+ g_ptr_array_add (desktop_file_dirs, desktop_file_dir_ref (system_profile_dir));
|
||||||
|
+
|
||||||
|
+ user = g_get_user_name ();
|
||||||
|
+ if (user != NULL)
|
||||||
|
+ {
|
||||||
|
+ gchar *profile_dir, *user_data_dir, *env_dir, *env_data_dir;
|
||||||
|
+
|
||||||
|
+ profile_dir = g_build_filename ("/nix/var/nix/profiles/per-user", user, NULL);
|
||||||
|
+ user_data_dir = g_build_filename (profile_dir, "profile", "share", NULL);
|
||||||
|
+ user_profile_dir = desktop_file_dir_new (user_data_dir);
|
||||||
|
+ user_profile_dir->nix_profile_watch_dir = profile_dir;
|
||||||
|
+
|
||||||
|
+ env_dir = g_build_filename ("/etc/profiles/per-user", NULL);
|
||||||
|
+ env_data_dir = g_build_filename (env_dir, user, "share", NULL);
|
||||||
|
+ user_env_dir = desktop_file_dir_new (env_data_dir);
|
||||||
|
+ user_env_dir->nix_profile_watch_dir = env_dir;
|
||||||
|
+
|
||||||
|
+ g_ptr_array_add (desktop_file_dirs, desktop_file_dir_ref (user_profile_dir));
|
||||||
|
+ g_ptr_array_add (desktop_file_dirs, desktop_file_dir_ref (user_env_dir));
|
||||||
|
+ g_free (user_data_dir);
|
||||||
|
+ g_free (env_data_dir);
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
/* The list of directories will never change after this, unless
|
||||||
|
* g_get_user_config_dir() changes due to %G_TEST_OPTION_ISOLATE_DIRS. */
|
||||||
|
desktop_file_dirs_config_dir = user_config_dir;
|
442
patches/base/gnome-control-center/no-alert-chooser.patch
Normal file
442
patches/base/gnome-control-center/no-alert-chooser.patch
Normal file
|
@ -0,0 +1,442 @@
|
||||||
|
diff --git a/panels/sound/cc-alert-chooser.c b/panels/sound/cc-alert-chooser.c
|
||||||
|
deleted file mode 100644
|
||||||
|
index 8e60659..0000000
|
||||||
|
--- a/panels/sound/cc-alert-chooser.c
|
||||||
|
+++ /dev/null
|
||||||
|
@@ -1,278 +0,0 @@
|
||||||
|
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
|
||||||
|
- *
|
||||||
|
- * Copyright (C) 2018 Canonical Ltd.
|
||||||
|
- *
|
||||||
|
- * This program is free software; you can redistribute it and/or
|
||||||
|
- * modify it under the terms of the GNU General Public License as
|
||||||
|
- * published by the Free Software Foundation; either version 2 of the
|
||||||
|
- * License, or (at your option) any later version.
|
||||||
|
- *
|
||||||
|
- * This program is distributed in the hope that it will be useful, but
|
||||||
|
- * WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
- * Lesser General Public License for more details.
|
||||||
|
- *
|
||||||
|
- * You should have received a copy of the GNU General Public License
|
||||||
|
- * along with this program; if not, see <http://www.gnu.org/licenses/>.
|
||||||
|
- */
|
||||||
|
-
|
||||||
|
-#include <glib/gi18n.h>
|
||||||
|
-#include <gsound.h>
|
||||||
|
-
|
||||||
|
-#include "config.h"
|
||||||
|
-#include "cc-alert-chooser.h"
|
||||||
|
-#include "cc-sound-button.h"
|
||||||
|
-#include "cc-sound-resources.h"
|
||||||
|
-
|
||||||
|
-#define KEY_SOUNDS_SCHEMA "org.gnome.desktop.sound"
|
||||||
|
-
|
||||||
|
-struct _CcAlertChooser
|
||||||
|
-{
|
||||||
|
- GtkBox parent_instance;
|
||||||
|
-
|
||||||
|
- CcSoundButton *bark_button;
|
||||||
|
- CcSoundButton *drip_button;
|
||||||
|
- CcSoundButton *glass_button;
|
||||||
|
- CcSoundButton *sonar_button;
|
||||||
|
-
|
||||||
|
- GSoundContext *context;
|
||||||
|
- GSettings *sound_settings;
|
||||||
|
-};
|
||||||
|
-
|
||||||
|
-static void clicked_cb (CcAlertChooser *self,
|
||||||
|
- CcSoundButton *button);
|
||||||
|
-
|
||||||
|
-G_DEFINE_TYPE (CcAlertChooser, cc_alert_chooser, GTK_TYPE_BOX)
|
||||||
|
-
|
||||||
|
-#define CUSTOM_THEME_NAME "__custom"
|
||||||
|
-
|
||||||
|
-static gchar *
|
||||||
|
-get_theme_dir (void)
|
||||||
|
-{
|
||||||
|
- return g_build_filename (g_get_user_data_dir (), "sounds", CUSTOM_THEME_NAME, NULL);
|
||||||
|
-}
|
||||||
|
-
|
||||||
|
-static gchar *
|
||||||
|
-get_sound_path (const gchar *name)
|
||||||
|
-{
|
||||||
|
- g_autofree gchar *filename = NULL;
|
||||||
|
-
|
||||||
|
- filename = g_strdup_printf ("%s.ogg", name);
|
||||||
|
- return g_build_filename (SOUND_DATA_DIR, "gnome", "default", "alerts", filename, NULL);
|
||||||
|
-}
|
||||||
|
-
|
||||||
|
-static gchar *
|
||||||
|
-get_alert_name (void)
|
||||||
|
-{
|
||||||
|
- g_autofree gchar *dir = NULL;
|
||||||
|
- g_autofree gchar *path = NULL;
|
||||||
|
- g_autoptr(GFile) file = NULL;
|
||||||
|
- g_autoptr(GFileInfo) info = NULL;
|
||||||
|
- const gchar *target;
|
||||||
|
- g_autofree gchar *basename = NULL;
|
||||||
|
- g_autoptr(GError) error = NULL;
|
||||||
|
-
|
||||||
|
- dir = get_theme_dir ();
|
||||||
|
- path = g_build_filename (dir, "bell-terminal.ogg", NULL);
|
||||||
|
- file = g_file_new_for_path (path);
|
||||||
|
-
|
||||||
|
- info = g_file_query_info (file,
|
||||||
|
- G_FILE_ATTRIBUTE_STANDARD_SYMLINK_TARGET,
|
||||||
|
- G_FILE_QUERY_INFO_NONE,
|
||||||
|
- NULL,
|
||||||
|
- &error);
|
||||||
|
- if (info == NULL)
|
||||||
|
- {
|
||||||
|
- if (!g_error_matches (error, G_IO_ERROR, G_IO_ERROR_NOT_FOUND))
|
||||||
|
- g_warning ("Failed to get sound theme symlink %s: %s", path, error->message);
|
||||||
|
- return NULL;
|
||||||
|
- }
|
||||||
|
- target = g_file_info_get_attribute_byte_string (info, G_FILE_ATTRIBUTE_STANDARD_SYMLINK_TARGET);
|
||||||
|
- if (target == NULL)
|
||||||
|
- return NULL;
|
||||||
|
-
|
||||||
|
- basename = g_path_get_basename (target);
|
||||||
|
- if (g_str_has_suffix (basename, ".ogg"))
|
||||||
|
- basename[strlen (basename) - 4] = '\0';
|
||||||
|
-
|
||||||
|
- return g_steal_pointer (&basename);
|
||||||
|
-}
|
||||||
|
-
|
||||||
|
-static void
|
||||||
|
-set_sound_symlink (const gchar *alert_name,
|
||||||
|
- const gchar *name)
|
||||||
|
-{
|
||||||
|
- g_autofree gchar *dir = NULL;
|
||||||
|
- g_autofree gchar *source_filename = NULL;
|
||||||
|
- g_autofree gchar *source_path = NULL;
|
||||||
|
- g_autofree gchar *target_path = NULL;
|
||||||
|
- g_autoptr(GFile) file = NULL;
|
||||||
|
- g_autoptr(GError) error = NULL;
|
||||||
|
-
|
||||||
|
- dir = get_theme_dir ();
|
||||||
|
- source_filename = g_strdup_printf ("%s.ogg", alert_name);
|
||||||
|
- source_path = g_build_filename (dir, source_filename, NULL);
|
||||||
|
- target_path = get_sound_path (name);
|
||||||
|
-
|
||||||
|
- file = g_file_new_for_path (source_path);
|
||||||
|
- if (!g_file_delete (file, NULL, &error))
|
||||||
|
- {
|
||||||
|
- if (!g_error_matches (error, G_IO_ERROR, G_IO_ERROR_NOT_FOUND))
|
||||||
|
- g_warning ("Failed to remove existing sound symbolic link %s: %s", source_path, error->message);
|
||||||
|
- }
|
||||||
|
- if (!g_file_make_symbolic_link (file, target_path, NULL, &error))
|
||||||
|
- g_warning ("Failed to make sound theme symbolic link %s->%s: %s", source_path, target_path, error->message);
|
||||||
|
-}
|
||||||
|
-
|
||||||
|
-static void
|
||||||
|
-set_custom_theme (CcAlertChooser *self,
|
||||||
|
- const gchar *name)
|
||||||
|
-{
|
||||||
|
- g_autofree gchar *dir = NULL;
|
||||||
|
- g_autofree gchar *theme_path = NULL;
|
||||||
|
- g_autoptr(GKeyFile) theme_file = NULL;
|
||||||
|
- g_autoptr(GVariant) default_theme = NULL;
|
||||||
|
- g_autoptr(GError) load_error = NULL;
|
||||||
|
- g_autoptr(GError) save_error = NULL;
|
||||||
|
-
|
||||||
|
- dir = get_theme_dir ();
|
||||||
|
- g_mkdir_with_parents (dir, USER_DIR_MODE);
|
||||||
|
-
|
||||||
|
- theme_path = g_build_filename (dir, "index.theme", NULL);
|
||||||
|
-
|
||||||
|
- default_theme = g_settings_get_default_value (self->sound_settings, "theme-name");
|
||||||
|
-
|
||||||
|
- theme_file = g_key_file_new ();
|
||||||
|
- if (!g_key_file_load_from_file (theme_file, theme_path, G_KEY_FILE_KEEP_COMMENTS, &load_error))
|
||||||
|
- {
|
||||||
|
- if (!g_error_matches (load_error, G_FILE_ERROR, G_FILE_ERROR_NOENT))
|
||||||
|
- g_printerr ("Failed to load theme file %s: %s", theme_path, load_error->message);
|
||||||
|
- }
|
||||||
|
- g_key_file_set_string (theme_file, "Sound Theme", "Name", _("Custom"));
|
||||||
|
- if (default_theme != NULL)
|
||||||
|
- g_key_file_set_string (theme_file, "Sound Theme", "Inherits", g_variant_get_string (default_theme, NULL));
|
||||||
|
- g_key_file_set_string (theme_file, "Sound Theme", "Directories", ".");
|
||||||
|
-
|
||||||
|
- if (!g_key_file_save_to_file (theme_file, theme_path, &save_error))
|
||||||
|
- {
|
||||||
|
- g_warning ("Failed to save theme file %s: %s", theme_path, save_error->message);
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- set_sound_symlink ("bell-terminal", name);
|
||||||
|
- set_sound_symlink ("bell-window-system", name);
|
||||||
|
-
|
||||||
|
- g_settings_set_boolean (self->sound_settings, "event-sounds", TRUE);
|
||||||
|
- g_settings_set_string (self->sound_settings, "theme-name", CUSTOM_THEME_NAME);
|
||||||
|
-}
|
||||||
|
-
|
||||||
|
-static void
|
||||||
|
-select_sound (CcAlertChooser *self,
|
||||||
|
- const gchar *name)
|
||||||
|
-{
|
||||||
|
- g_autofree gchar *path = NULL;
|
||||||
|
- g_autoptr(GError) error = NULL;
|
||||||
|
-
|
||||||
|
- path = get_sound_path (name);
|
||||||
|
- if (!gsound_context_play_simple (self->context, NULL, &error,
|
||||||
|
- GSOUND_ATTR_MEDIA_FILENAME, path,
|
||||||
|
- NULL))
|
||||||
|
- {
|
||||||
|
- g_warning ("Failed to play alert sound %s: %s", path, error->message);
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- set_custom_theme (self, name);
|
||||||
|
-}
|
||||||
|
-
|
||||||
|
-static void
|
||||||
|
-set_button (CcAlertChooser *self,
|
||||||
|
- CcSoundButton *button,
|
||||||
|
- gboolean active)
|
||||||
|
-{
|
||||||
|
- g_signal_handlers_block_by_func (button, clicked_cb, self);
|
||||||
|
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), active);
|
||||||
|
- g_signal_handlers_unblock_by_func (button, clicked_cb, self);
|
||||||
|
-}
|
||||||
|
-
|
||||||
|
-static void
|
||||||
|
-clicked_cb (CcAlertChooser *self,
|
||||||
|
- CcSoundButton *button)
|
||||||
|
-{
|
||||||
|
- if (button == self->bark_button)
|
||||||
|
- select_sound (self, "bark");
|
||||||
|
- else if (button == self->drip_button)
|
||||||
|
- select_sound (self, "drip");
|
||||||
|
- else if (button == self->glass_button)
|
||||||
|
- select_sound (self, "glass");
|
||||||
|
- else if (button == self->sonar_button)
|
||||||
|
- select_sound (self, "sonar");
|
||||||
|
-
|
||||||
|
- set_button (self, button, TRUE);
|
||||||
|
- if (button != self->bark_button)
|
||||||
|
- set_button (self, self->bark_button, FALSE);
|
||||||
|
- if (button != self->drip_button)
|
||||||
|
- set_button (self, self->drip_button, FALSE);
|
||||||
|
- if (button != self->glass_button)
|
||||||
|
- set_button (self, self->glass_button, FALSE);
|
||||||
|
- if (button != self->sonar_button)
|
||||||
|
- set_button (self, self->sonar_button, FALSE);
|
||||||
|
-}
|
||||||
|
-
|
||||||
|
-static void
|
||||||
|
-cc_alert_chooser_dispose (GObject *object)
|
||||||
|
-{
|
||||||
|
- CcAlertChooser *self = CC_ALERT_CHOOSER (object);
|
||||||
|
-
|
||||||
|
- g_clear_object (&self->context);
|
||||||
|
- g_clear_object (&self->sound_settings);
|
||||||
|
-
|
||||||
|
- G_OBJECT_CLASS (cc_alert_chooser_parent_class)->dispose (object);
|
||||||
|
-}
|
||||||
|
-
|
||||||
|
-void
|
||||||
|
-cc_alert_chooser_class_init (CcAlertChooserClass *klass)
|
||||||
|
-{
|
||||||
|
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
|
||||||
|
- GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
|
||||||
|
-
|
||||||
|
- object_class->dispose = cc_alert_chooser_dispose;
|
||||||
|
-
|
||||||
|
- gtk_widget_class_set_template_from_resource (widget_class, "/org/gnome/control-center/sound/cc-alert-chooser.ui");
|
||||||
|
-
|
||||||
|
- gtk_widget_class_bind_template_child (widget_class, CcAlertChooser, bark_button);
|
||||||
|
- gtk_widget_class_bind_template_child (widget_class, CcAlertChooser, drip_button);
|
||||||
|
- gtk_widget_class_bind_template_child (widget_class, CcAlertChooser, glass_button);
|
||||||
|
- gtk_widget_class_bind_template_child (widget_class, CcAlertChooser, sonar_button);
|
||||||
|
-
|
||||||
|
- gtk_widget_class_bind_template_callback (widget_class, clicked_cb);
|
||||||
|
-
|
||||||
|
- g_type_ensure (CC_TYPE_SOUND_BUTTON);
|
||||||
|
-}
|
||||||
|
-
|
||||||
|
-void
|
||||||
|
-cc_alert_chooser_init (CcAlertChooser *self)
|
||||||
|
-{
|
||||||
|
- g_autofree gchar *alert_name = NULL;
|
||||||
|
- g_autoptr(GError) error = NULL;
|
||||||
|
-
|
||||||
|
- g_resources_register (cc_sound_get_resource ());
|
||||||
|
-
|
||||||
|
- gtk_widget_init_template (GTK_WIDGET (self));
|
||||||
|
-
|
||||||
|
- self->context = gsound_context_new (NULL, &error);
|
||||||
|
- if (self->context == NULL)
|
||||||
|
- g_error ("Failed to make sound context: %s", error->message);
|
||||||
|
-
|
||||||
|
- self->sound_settings = g_settings_new (KEY_SOUNDS_SCHEMA);
|
||||||
|
-
|
||||||
|
- alert_name = get_alert_name ();
|
||||||
|
- if (g_strcmp0 (alert_name, "bark") == 0)
|
||||||
|
- set_button (self, self->bark_button, TRUE);
|
||||||
|
- else if (g_strcmp0 (alert_name, "drip") == 0)
|
||||||
|
- set_button (self, self->drip_button, TRUE);
|
||||||
|
- else if (g_strcmp0 (alert_name, "glass") == 0)
|
||||||
|
- set_button (self, self->glass_button, TRUE);
|
||||||
|
- else if (g_strcmp0 (alert_name, "sonar") == 0)
|
||||||
|
- set_button (self, self->sonar_button, TRUE);
|
||||||
|
- else if (alert_name != NULL)
|
||||||
|
- g_warning ("Current alert sound has unknown name %s", alert_name);
|
||||||
|
-}
|
||||||
|
diff --git a/panels/sound/cc-alert-chooser.h b/panels/sound/cc-alert-chooser.h
|
||||||
|
deleted file mode 100644
|
||||||
|
index c6f4b87..0000000
|
||||||
|
--- a/panels/sound/cc-alert-chooser.h
|
||||||
|
+++ /dev/null
|
||||||
|
@@ -1,28 +0,0 @@
|
||||||
|
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
|
||||||
|
- *
|
||||||
|
- * Copyright (C) 2018 Canonical Ltd.
|
||||||
|
- *
|
||||||
|
- * This program is free software; you can redistribute it and/or
|
||||||
|
- * modify it under the terms of the GNU General Public License as
|
||||||
|
- * published by the Free Software Foundation; either version 2 of the
|
||||||
|
- * License, or (at your option) any later version.
|
||||||
|
- *
|
||||||
|
- * This program is distributed in the hope that it will be useful, but
|
||||||
|
- * WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
- * Lesser General Public License for more details.
|
||||||
|
- *
|
||||||
|
- * You should have received a copy of the GNU General Public License
|
||||||
|
- * along with this program; if not, see <http://www.gnu.org/licenses/>.
|
||||||
|
- */
|
||||||
|
-
|
||||||
|
-#pragma once
|
||||||
|
-
|
||||||
|
-#include <gtk/gtk.h>
|
||||||
|
-
|
||||||
|
-G_BEGIN_DECLS
|
||||||
|
-
|
||||||
|
-#define CC_TYPE_ALERT_CHOOSER (cc_alert_chooser_get_type ())
|
||||||
|
-G_DECLARE_FINAL_TYPE (CcAlertChooser, cc_alert_chooser, CC, ALERT_CHOOSER, GtkBox)
|
||||||
|
-
|
||||||
|
-G_END_DECLS
|
||||||
|
diff --git a/panels/sound/cc-alert-chooser.ui b/panels/sound/cc-alert-chooser.ui
|
||||||
|
deleted file mode 100644
|
||||||
|
index c673711..0000000
|
||||||
|
--- a/panels/sound/cc-alert-chooser.ui
|
||||||
|
+++ /dev/null
|
||||||
|
@@ -1,38 +0,0 @@
|
||||||
|
-<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
-<interface>
|
||||||
|
- <!-- interface-requires gtk+ 3.0 -->
|
||||||
|
- <template class="CcAlertChooser" parent="GtkBox">
|
||||||
|
- <property name="homogeneous">True</property>
|
||||||
|
- <style>
|
||||||
|
- <class name="linked"/>
|
||||||
|
- </style>
|
||||||
|
- <child>
|
||||||
|
- <object class="CcSoundButton" id="bark_button">
|
||||||
|
- <property name="visible">True</property>
|
||||||
|
- <property name="label" translatable="yes">Bark</property>
|
||||||
|
- <signal name="clicked" handler="clicked_cb" object="CcAlertChooser" swapped="yes"/>
|
||||||
|
- </object>
|
||||||
|
- </child>
|
||||||
|
- <child>
|
||||||
|
- <object class="CcSoundButton" id="drip_button">
|
||||||
|
- <property name="visible">True</property>
|
||||||
|
- <property name="label" translatable="yes">Drip</property>
|
||||||
|
- <signal name="clicked" handler="clicked_cb" object="CcAlertChooser" swapped="yes"/>
|
||||||
|
- </object>
|
||||||
|
- </child>
|
||||||
|
- <child>
|
||||||
|
- <object class="CcSoundButton" id="glass_button">
|
||||||
|
- <property name="visible">True</property>
|
||||||
|
- <property name="label" translatable="yes">Glass</property>
|
||||||
|
- <signal name="clicked" handler="clicked_cb" object="CcAlertChooser" swapped="yes"/>
|
||||||
|
- </object>
|
||||||
|
- </child>
|
||||||
|
- <child>
|
||||||
|
- <object class="CcSoundButton" id="sonar_button">
|
||||||
|
- <property name="visible">True</property>
|
||||||
|
- <property name="label" translatable="yes">Sonar</property>
|
||||||
|
- <signal name="clicked" handler="clicked_cb" object="CcAlertChooser" swapped="yes"/>
|
||||||
|
- </object>
|
||||||
|
- </child>
|
||||||
|
- </template>
|
||||||
|
-</interface>
|
||||||
|
diff --git a/panels/sound/cc-sound-panel.c b/panels/sound/cc-sound-panel.c
|
||||||
|
index 5e6e03d..611d2b9 100644
|
||||||
|
--- a/panels/sound/cc-sound-panel.c
|
||||||
|
+++ b/panels/sound/cc-sound-panel.c
|
||||||
|
@@ -31,7 +31,6 @@
|
||||||
|
#include <gvc-mixer-control.h>
|
||||||
|
|
||||||
|
#include "list-box-helper.h"
|
||||||
|
-#include "cc-alert-chooser.h"
|
||||||
|
#include "cc-balance-slider.h"
|
||||||
|
#include "cc-device-combo-box.h"
|
||||||
|
#include "cc-fade-slider.h"
|
||||||
|
@@ -267,7 +266,6 @@ cc_sound_panel_class_init (CcSoundPanelClass *klass)
|
||||||
|
gtk_widget_class_bind_template_callback (widget_class, output_device_changed_cb);
|
||||||
|
gtk_widget_class_bind_template_callback (widget_class, test_output_configuration_button_clicked_cb);
|
||||||
|
|
||||||
|
- g_type_ensure (CC_TYPE_ALERT_CHOOSER);
|
||||||
|
g_type_ensure (CC_TYPE_BALANCE_SLIDER);
|
||||||
|
g_type_ensure (CC_TYPE_DEVICE_COMBO_BOX);
|
||||||
|
g_type_ensure (CC_TYPE_FADE_SLIDER);
|
||||||
|
diff --git a/panels/sound/cc-sound-panel.ui b/panels/sound/cc-sound-panel.ui
|
||||||
|
index b5706e2..ab4380a 100644
|
||||||
|
--- a/panels/sound/cc-sound-panel.ui
|
||||||
|
+++ b/panels/sound/cc-sound-panel.ui
|
||||||
|
@@ -364,23 +364,6 @@
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
- <child>
|
||||||
|
- <object class="GtkLabel">
|
||||||
|
- <property name="visible">True</property>
|
||||||
|
- <property name="xalign">0</property>
|
||||||
|
- <property name="margin-top">18</property>
|
||||||
|
- <property name="label" translatable="yes">Alert Sound</property>
|
||||||
|
- <attributes>
|
||||||
|
- <attribute name="weight" value="bold"/>
|
||||||
|
- </attributes>
|
||||||
|
- </object>
|
||||||
|
- </child>
|
||||||
|
- <child>
|
||||||
|
- <object class="CcAlertChooser">
|
||||||
|
- <property name="visible">True</property>
|
||||||
|
- <property name="hexpand">True</property>
|
||||||
|
- </object>
|
||||||
|
- </child>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
diff --git a/panels/sound/meson.build b/panels/sound/meson.build
|
||||||
|
index fa0f128..f47e7f6 100644
|
||||||
|
--- a/panels/sound/meson.build
|
||||||
|
+++ b/panels/sound/meson.build
|
||||||
|
@@ -31,7 +31,6 @@ cflags += [
|
||||||
|
]
|
||||||
|
|
||||||
|
sources = files(
|
||||||
|
- 'cc-alert-chooser.c',
|
||||||
|
'cc-balance-slider.c',
|
||||||
|
'cc-device-combo-box.c',
|
||||||
|
'cc-fade-slider.c',
|
||||||
|
@@ -67,7 +66,6 @@ resource_data = files(
|
||||||
|
'icons/audio-speaker-right.svg',
|
||||||
|
'icons/audio-speaker-right-testing.svg',
|
||||||
|
'icons/audio-speaker-testing.svg',
|
||||||
|
- 'cc-alert-chooser.ui',
|
||||||
|
'cc-balance-slider.ui',
|
||||||
|
'cc-device-combo-box.ui',
|
||||||
|
'cc-fade-slider.ui',
|
||||||
|
diff --git a/panels/sound/sound.gresource.xml b/panels/sound/sound.gresource.xml
|
||||||
|
index a7b662d..0f6b20f 100644
|
||||||
|
--- a/panels/sound/sound.gresource.xml
|
||||||
|
+++ b/panels/sound/sound.gresource.xml
|
||||||
|
@@ -1,7 +1,6 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<gresources>
|
||||||
|
<gresource prefix="/org/gnome/control-center/sound">
|
||||||
|
- <file preprocess="xml-stripblanks">cc-alert-chooser.ui</file>
|
||||||
|
<file preprocess="xml-stripblanks">cc-balance-slider.ui</file>
|
||||||
|
<file preprocess="xml-stripblanks">cc-device-combo-box.ui</file>
|
||||||
|
<file preprocess="xml-stripblanks">cc-fade-slider.ui</file>
|
14
patches/base/ipfs/ipfs-allow-publish-with-ipns-mounted.patch
Normal file
14
patches/base/ipfs/ipfs-allow-publish-with-ipns-mounted.patch
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
diff --git a/core/coreapi/coreapi.go b/core/coreapi/coreapi.go
|
||||||
|
index 5b638826b..32747fe53 100644
|
||||||
|
--- a/core/coreapi/coreapi.go
|
||||||
|
+++ b/core/coreapi/coreapi.go
|
||||||
|
@@ -191,9 +191,6 @@ func (api *CoreAPI) WithOptions(opts ...options.ApiOption) (coreiface.CoreAPI, e
|
||||||
|
}
|
||||||
|
|
||||||
|
subApi.checkPublishAllowed = func() error {
|
||||||
|
- if n.Mounts.Ipns != nil && n.Mounts.Ipns.IsActive() {
|
||||||
|
- return errors.New("cannot manually publish while IPNS is mounted")
|
||||||
|
- }
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
25
patches/base/ipfs/ipfs-fuse-nuke-getxattr.patch
Normal file
25
patches/base/ipfs/ipfs-fuse-nuke-getxattr.patch
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
diff --git a/fuse/readonly/readonly_unix.go b/fuse/readonly/readonly_unix.go
|
||||||
|
index 3a2269393..8bff88f28 100644
|
||||||
|
--- a/fuse/readonly/readonly_unix.go
|
||||||
|
+++ b/fuse/readonly/readonly_unix.go
|
||||||
|
@@ -228,12 +228,6 @@ func (s *Node) ReadDirAll(ctx context.Context) ([]fuse.Dirent, error) {
|
||||||
|
return nil, fuse.ENOENT
|
||||||
|
}
|
||||||
|
|
||||||
|
-func (s *Node) Getxattr(ctx context.Context, req *fuse.GetxattrRequest, resp *fuse.GetxattrResponse) error {
|
||||||
|
- // TODO: is nil the right response for 'bug off, we ain't got none' ?
|
||||||
|
- resp.Xattr = nil
|
||||||
|
- return nil
|
||||||
|
-}
|
||||||
|
-
|
||||||
|
func (s *Node) Readlink(ctx context.Context, req *fuse.ReadlinkRequest) (string, error) {
|
||||||
|
if s.cached == nil || s.cached.Type() != ft.TSymlink {
|
||||||
|
return "", fuse.Errno(syscall.EINVAL)
|
||||||
|
@@ -278,7 +272,6 @@ type roNode interface {
|
||||||
|
fs.Node
|
||||||
|
fs.NodeStringLookuper
|
||||||
|
fs.NodeReadlinker
|
||||||
|
- fs.NodeGetxattrer
|
||||||
|
}
|
||||||
|
|
||||||
|
var _ roNode = (*Node)(nil)
|
|
@ -0,0 +1,14 @@
|
||||||
|
diff --git a/vendor/github.com/ipfs/go-filestore/fsrefstore.go b/vendor/github.com/ipfs/go-filestore/fsrefstore.go
|
||||||
|
index 19927e0..7ff13aa 100644
|
||||||
|
--- a/vendor/github.com/ipfs/go-filestore/fsrefstore.go
|
||||||
|
+++ b/vendor/github.com/ipfs/go-filestore/fsrefstore.go
|
||||||
|
@@ -281,9 +281,6 @@ func (f *FileManager) putTo(b *posinfo.FilestoreNode, to putter) error {
|
||||||
|
if !f.AllowFiles {
|
||||||
|
return ErrFilestoreNotEnabled
|
||||||
|
}
|
||||||
|
- if !filepath.HasPrefix(b.PosInfo.FullPath, f.root) { //nolint:staticcheck
|
||||||
|
- return fmt.Errorf("cannot add filestore references outside ipfs root (%s)", f.root)
|
||||||
|
- }
|
||||||
|
|
||||||
|
p, err := filepath.Rel(f.root, b.PosInfo.FullPath)
|
||||||
|
if err != nil {
|
11
patches/base/ipfs/lain-webui-0.10.0.patch
Normal file
11
patches/base/ipfs/lain-webui-0.10.0.patch
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
--- a/core/corehttp/webui.go 2020-05-09 04:58:18.000000000 +0200
|
||||||
|
+++ b/core/corehttp/webui.go 2020-07-15 00:22:00.439862559 +0200
|
||||||
|
@@ -1,7 +1,7 @@
|
||||||
|
package corehttp
|
||||||
|
|
||||||
|
// TODO: move to IPNS
|
||||||
|
-const WebUIPath = "/ipfs/bafybeihcyruaeza7uyjd6ugicbcrqumejf6uf353e5etdkhotqffwtguva" // v2.13.0
|
||||||
|
+const WebUIPath = "/ipns/webui.ipfs.privatevoid.net"
|
||||||
|
|
||||||
|
// this is a list of all past webUI paths.
|
||||||
|
var WebUIPaths = []string{
|
150
patches/base/nautilus/nautilus-extra-paths.patch
Normal file
150
patches/base/nautilus/nautilus-extra-paths.patch
Normal file
|
@ -0,0 +1,150 @@
|
||||||
|
diff --git a/src/nautilus-file-utilities.c b/src/nautilus-file-utilities.c
|
||||||
|
index 3b161f5..e597e50 100644
|
||||||
|
--- a/src/nautilus-file-utilities.c
|
||||||
|
+++ b/src/nautilus-file-utilities.c
|
||||||
|
@@ -459,6 +459,45 @@ nautilus_is_home_directory (GFile *dir)
|
||||||
|
return g_file_equal (dir, home_dir);
|
||||||
|
}
|
||||||
|
|
||||||
|
+gboolean
|
||||||
|
+nautilus_is_ipfs_directory (GFile *dir)
|
||||||
|
+{
|
||||||
|
+ static GFile *ipfs_dir = NULL;
|
||||||
|
+
|
||||||
|
+ if (ipfs_dir == NULL)
|
||||||
|
+ {
|
||||||
|
+ ipfs_dir = g_file_new_for_path ("/ipfs");
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ return g_file_equal (dir, ipfs_dir);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+gboolean
|
||||||
|
+nautilus_is_ipns_directory (GFile *dir)
|
||||||
|
+{
|
||||||
|
+ static GFile *ipns_dir = NULL;
|
||||||
|
+
|
||||||
|
+ if (ipns_dir == NULL)
|
||||||
|
+ {
|
||||||
|
+ ipns_dir = g_file_new_for_path ("/ipns");
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ return g_file_equal (dir, ipns_dir);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+gboolean
|
||||||
|
+nautilus_is_nix_store_directory (GFile *dir)
|
||||||
|
+{
|
||||||
|
+ static GFile *nix_store_dir = NULL;
|
||||||
|
+
|
||||||
|
+ if (nix_store_dir == NULL)
|
||||||
|
+ {
|
||||||
|
+ nix_store_dir = g_file_new_for_path ("/nix/store");
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ return g_file_equal (dir, nix_store_dir);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
gboolean
|
||||||
|
nautilus_is_root_directory (GFile *dir)
|
||||||
|
{
|
||||||
|
diff --git a/src/nautilus-file-utilities.h b/src/nautilus-file-utilities.h
|
||||||
|
index 67df0e4..64eda25 100644
|
||||||
|
--- a/src/nautilus-file-utilities.h
|
||||||
|
+++ b/src/nautilus-file-utilities.h
|
||||||
|
@@ -36,6 +36,9 @@
|
||||||
|
*/
|
||||||
|
char * nautilus_get_user_directory (void);
|
||||||
|
char * nautilus_get_home_directory_uri (void);
|
||||||
|
+gboolean nautilus_is_ipfs_directory (GFile *dir);
|
||||||
|
+gboolean nautilus_is_ipns_directory (GFile *dir);
|
||||||
|
+gboolean nautilus_is_nix_store_directory (GFile *dir);
|
||||||
|
gboolean nautilus_is_root_directory (GFile *dir);
|
||||||
|
gboolean nautilus_is_home_directory (GFile *dir);
|
||||||
|
gboolean nautilus_is_home_directory_file (GFile *dir,
|
||||||
|
diff --git a/src/nautilus-pathbar.c b/src/nautilus-pathbar.c
|
||||||
|
index 622686b..67ca14c 100644
|
||||||
|
--- a/src/nautilus-pathbar.c
|
||||||
|
+++ b/src/nautilus-pathbar.c
|
||||||
|
@@ -52,6 +52,9 @@ typedef enum
|
||||||
|
RECENT_BUTTON,
|
||||||
|
MOUNT_BUTTON,
|
||||||
|
TRASH_BUTTON,
|
||||||
|
+ IPFS_BUTTON,
|
||||||
|
+ IPNS_BUTTON,
|
||||||
|
+ NIX_STORE_BUTTON,
|
||||||
|
} ButtonType;
|
||||||
|
|
||||||
|
#define BUTTON_DATA(x) ((ButtonData *) (x))
|
||||||
|
@@ -327,6 +330,21 @@ get_dir_name (ButtonData *button_data)
|
||||||
|
return _("Home");
|
||||||
|
}
|
||||||
|
|
||||||
|
+ case IPFS_BUTTON:
|
||||||
|
+ {
|
||||||
|
+ return _("IPFS");
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ case IPNS_BUTTON:
|
||||||
|
+ {
|
||||||
|
+ return _("IPNS");
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ case NIX_STORE_BUTTON:
|
||||||
|
+ {
|
||||||
|
+ return _("Nix Store");
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
case OTHER_LOCATIONS_BUTTON:
|
||||||
|
{
|
||||||
|
return _("Other Locations");
|
||||||
|
@@ -1251,6 +1269,17 @@ get_gicon (ButtonData *button_data)
|
||||||
|
return g_themed_icon_new (NAUTILUS_ICON_FILESYSTEM);
|
||||||
|
}
|
||||||
|
|
||||||
|
+ case NIX_STORE_BUTTON:
|
||||||
|
+ {
|
||||||
|
+ return g_themed_icon_new ("weather-snow-symbolic");
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ case IPFS_BUTTON:
|
||||||
|
+ case IPNS_BUTTON:
|
||||||
|
+ {
|
||||||
|
+ return g_themed_icon_new (NAUTILUS_ICON_FOLDER_PUBLIC_SHARE);
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
case HOME_BUTTON:
|
||||||
|
{
|
||||||
|
return g_themed_icon_new (NAUTILUS_ICON_HOME);
|
||||||
|
@@ -1347,6 +1376,21 @@ setup_button_type (ButtonData *button_data,
|
||||||
|
{
|
||||||
|
button_data->type = ROOT_BUTTON;
|
||||||
|
}
|
||||||
|
+ else if (nautilus_is_ipfs_directory (location))
|
||||||
|
+ {
|
||||||
|
+ button_data->type = IPFS_BUTTON;
|
||||||
|
+ button_data->is_root = TRUE;
|
||||||
|
+ }
|
||||||
|
+ else if (nautilus_is_ipns_directory (location))
|
||||||
|
+ {
|
||||||
|
+ button_data->type = IPNS_BUTTON;
|
||||||
|
+ button_data->is_root = TRUE;
|
||||||
|
+ }
|
||||||
|
+ else if (nautilus_is_nix_store_directory (location))
|
||||||
|
+ {
|
||||||
|
+ button_data->type = NIX_STORE_BUTTON;
|
||||||
|
+ button_data->is_root = TRUE;
|
||||||
|
+ }
|
||||||
|
else if (nautilus_is_home_directory (location))
|
||||||
|
{
|
||||||
|
button_data->type = HOME_BUTTON;
|
||||||
|
@@ -1559,6 +1603,9 @@ make_button_data (NautilusPathBar *self,
|
||||||
|
case RECENT_BUTTON:
|
||||||
|
case STARRED_BUTTON:
|
||||||
|
case OTHER_LOCATIONS_BUTTON:
|
||||||
|
+ case IPFS_BUTTON:
|
||||||
|
+ case IPNS_BUTTON:
|
||||||
|
+ case NIX_STORE_BUTTON:
|
||||||
|
{
|
||||||
|
button_data->label = gtk_label_new (NULL);
|
||||||
|
button_data->disclosure_arrow = gtk_image_new_from_icon_name ("pan-down-symbolic",
|
|
@ -0,0 +1,125 @@
|
||||||
|
From 870df28bda2ae8022ce2df17886bc253c2a92cb1 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Jan Grulich <grulja@gmail.com>
|
||||||
|
Date: Mon, 14 Dec 2020 22:36:48 +0000
|
||||||
|
Subject: [PATCH] Improve screen sharing with PipeWire on Linux Wayland session
|
||||||
|
|
||||||
|
Current scenario when PipeWire desktop capturer is used:
|
||||||
|
Chromium picker dialog is created with screen and window capturer. Each
|
||||||
|
capturer makes an xdg-desktop-portal call, showing another picker
|
||||||
|
dialog. Once user confirms both pickers on xdg-desktop-portal side, yet
|
||||||
|
another picker is shown as a new capturer is created for the web page
|
||||||
|
itself.
|
||||||
|
|
||||||
|
With this change:
|
||||||
|
Chromium picker dialog is created, but only screen capturer will be
|
||||||
|
created as with xdg-desktop-portal the picker will handle both screens
|
||||||
|
and windows. Also in the chromium picker, the "window" tab creating
|
||||||
|
window capturer expects a list of windows and doesn't show previews,
|
||||||
|
but we need actually to behave exactly like the "screen" tab and show
|
||||||
|
preview of selected window. Then again, yet another picker from
|
||||||
|
xdg-desktop-portal is shown as a new capturer is created for the web
|
||||||
|
page itself.
|
||||||
|
|
||||||
|
Bug: chromium:1157006
|
||||||
|
Change-Id: I39eafc72eb46da7868d1114b5c106030c22787a4
|
||||||
|
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2578840
|
||||||
|
Commit-Queue: mark a. foltz <mfoltz@chromium.org>
|
||||||
|
Reviewed-by: mark a. foltz <mfoltz@chromium.org>
|
||||||
|
Reviewed-by: Wez <wez@chromium.org>
|
||||||
|
Reviewed-by: Guido Urdaneta <guidou@chromium.org>
|
||||||
|
Reviewed-by: Avi Drissman <avi@chromium.org>
|
||||||
|
Cr-Commit-Position: refs/heads/master@{#836814}
|
||||||
|
---
|
||||||
|
AUTHORS | 1 +
|
||||||
|
.../api/desktop_capture/desktop_capture_base.cc | 8 ++++++++
|
||||||
|
.../browser/media/webrtc/display_media_access_handler.cc | 8 ++++++++
|
||||||
|
content/public/browser/desktop_capture.cc | 9 +++++++++
|
||||||
|
content/public/browser/desktop_capture.h | 6 ++++++
|
||||||
|
5 files changed, 32 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/AUTHORS b/AUTHORS
|
||||||
|
index c0b2771655df5..a4f042fa7bc32 100644
|
||||||
|
--- a/AUTHORS
|
||||||
|
+++ b/AUTHORS
|
||||||
|
@@ -441,6 +441,7 @@ James Stanley <james@apphaus.co.uk>
|
||||||
|
James Vega <vega.james@gmail.com>
|
||||||
|
James Wei <james.wei@intel.com>
|
||||||
|
James Willcox <jwillcox@litl.com>
|
||||||
|
+Jan Grulich <grulja@gmail.com>
|
||||||
|
Jan Rucka <ruckajan10@gmail.com>
|
||||||
|
Jan Sauer <jan@jansauer.de>
|
||||||
|
Janusz Majnert <jmajnert@gmail.com>
|
||||||
|
diff --git a/chrome/browser/extensions/api/desktop_capture/desktop_capture_base.cc b/chrome/browser/extensions/api/desktop_capture/desktop_capture_base.cc
|
||||||
|
index fa790782b3ee0..a9708300d2c32 100644
|
||||||
|
--- a/chrome/browser/extensions/api/desktop_capture/desktop_capture_base.cc
|
||||||
|
+++ b/chrome/browser/extensions/api/desktop_capture/desktop_capture_base.cc
|
||||||
|
@@ -120,6 +120,14 @@ DesktopCaptureChooseDesktopMediaFunctionBase::Execute(
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
+ // Avoid offering window-capture as a separate source, since PipeWire's
|
||||||
|
+ // content-picker will offer both screen and window sources.
|
||||||
|
+ // See crbug.com/1157006.
|
||||||
|
+ if (content::desktop_capture::CanUsePipeWire() &&
|
||||||
|
+ base::Contains(media_types, content::DesktopMediaID::TYPE_SCREEN)) {
|
||||||
|
+ base::Erase(media_types, content::DesktopMediaID::TYPE_WINDOW);
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
DesktopMediaPickerController::DoneCallback callback = base::BindOnce(
|
||||||
|
&DesktopCaptureChooseDesktopMediaFunctionBase::OnPickerDialogResults,
|
||||||
|
this, origin, web_contents);
|
||||||
|
diff --git a/chrome/browser/media/webrtc/display_media_access_handler.cc b/chrome/browser/media/webrtc/display_media_access_handler.cc
|
||||||
|
index 3026674525bf5..e837e5ca1ed06 100644
|
||||||
|
--- a/chrome/browser/media/webrtc/display_media_access_handler.cc
|
||||||
|
+++ b/chrome/browser/media/webrtc/display_media_access_handler.cc
|
||||||
|
@@ -216,6 +216,14 @@ void DisplayMediaAccessHandler::ProcessQueuedAccessRequest(
|
||||||
|
content::DesktopMediaID::TYPE_SCREEN,
|
||||||
|
content::DesktopMediaID::TYPE_WINDOW,
|
||||||
|
content::DesktopMediaID::TYPE_WEB_CONTENTS};
|
||||||
|
+
|
||||||
|
+ // Avoid offering window-capture as a separate source, since PipeWire's
|
||||||
|
+ // content-picker will offer both screen and window sources.
|
||||||
|
+ // See crbug.com/1157006.
|
||||||
|
+ if (content::desktop_capture::CanUsePipeWire()) {
|
||||||
|
+ base::Erase(media_types, content::DesktopMediaID::TYPE_WINDOW);
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
auto source_lists = picker_factory_->CreateMediaList(media_types);
|
||||||
|
|
||||||
|
DesktopMediaPicker::DoneCallback done_callback =
|
||||||
|
diff --git a/content/public/browser/desktop_capture.cc b/content/public/browser/desktop_capture.cc
|
||||||
|
index 60065d125ff5d..c3b8f474cfb77 100644
|
||||||
|
--- a/content/public/browser/desktop_capture.cc
|
||||||
|
+++ b/content/public/browser/desktop_capture.cc
|
||||||
|
@@ -65,5 +65,14 @@ std::unique_ptr<webrtc::DesktopCapturer> CreateWindowCapturer() {
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
+bool CanUsePipeWire() {
|
||||||
|
+#if defined(WEBRTC_USE_PIPEWIRE)
|
||||||
|
+ return webrtc::DesktopCapturer::IsRunningUnderWayland() &&
|
||||||
|
+ base::FeatureList::IsEnabled(features::kWebRtcPipeWireCapturer);
|
||||||
|
+#else
|
||||||
|
+ return false;
|
||||||
|
+#endif
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
} // namespace desktop_capture
|
||||||
|
} // namespace content
|
||||||
|
diff --git a/content/public/browser/desktop_capture.h b/content/public/browser/desktop_capture.h
|
||||||
|
index c90997a8762a5..700d5c46aed5c 100644
|
||||||
|
--- a/content/public/browser/desktop_capture.h
|
||||||
|
+++ b/content/public/browser/desktop_capture.h
|
||||||
|
@@ -19,6 +19,12 @@ CONTENT_EXPORT webrtc::DesktopCaptureOptions CreateDesktopCaptureOptions();
|
||||||
|
CONTENT_EXPORT std::unique_ptr<webrtc::DesktopCapturer> CreateScreenCapturer();
|
||||||
|
CONTENT_EXPORT std::unique_ptr<webrtc::DesktopCapturer> CreateWindowCapturer();
|
||||||
|
|
||||||
|
+// Returns whether we can use PipeWire capturer based on:
|
||||||
|
+// 1) We run Linux Wayland session
|
||||||
|
+// 2) WebRTC is built with PipeWire enabled
|
||||||
|
+// 3) Chromium has features::kWebRtcPipeWireCapturer enabled
|
||||||
|
+CONTENT_EXPORT bool CanUsePipeWire();
|
||||||
|
+
|
||||||
|
} // namespace desktop_capture
|
||||||
|
} // namespace content
|
||||||
|
|
|
@ -0,0 +1,27 @@
|
||||||
|
diff --git a/net/base/registry_controlled_domains/effective_tld_names.dat b/net/base/registry_controlled_domains/effective_tld_names.dat
|
||||||
|
index 76e7bf2..b4083f1 100644
|
||||||
|
--- a/net/base/registry_controlled_domains/effective_tld_names.dat
|
||||||
|
+++ b/net/base/registry_controlled_domains/effective_tld_names.dat
|
||||||
|
@@ -13,6 +13,9 @@
|
||||||
|
|
||||||
|
// ===BEGIN ICANN DOMAINS===
|
||||||
|
|
||||||
|
+// Private Void Enterprises quicklink TLD
|
||||||
|
+void
|
||||||
|
+
|
||||||
|
// ac : https://en.wikipedia.org/wiki/.ac
|
||||||
|
ac
|
||||||
|
com.ac
|
||||||
|
diff --git a/net/base/registry_controlled_domains/effective_tld_names.gperf b/net/base/registry_controlled_domains/effective_tld_names.gperf
|
||||||
|
index eb9076e..1720c96 100644
|
||||||
|
--- a/net/base/registry_controlled_domains/effective_tld_names.gperf
|
||||||
|
+++ b/net/base/registry_controlled_domains/effective_tld_names.gperf
|
||||||
|
@@ -8043,6 +8043,7 @@ vn.ua, 0
|
||||||
|
voagat.no, 0
|
||||||
|
vodka, 0
|
||||||
|
volda.no, 0
|
||||||
|
+void, 0
|
||||||
|
volkenkunde.museum, 0
|
||||||
|
volkswagen, 0
|
||||||
|
vologda.su, 4
|
||||||
|
|
16
patches/base/vte/vte-high-refresh-rate.patch
Normal file
16
patches/base/vte/vte-high-refresh-rate.patch
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
diff --git a/src/vtedefines.hh b/src/vtedefines.hh
|
||||||
|
index c8ecb1a..eb46f52 100644
|
||||||
|
--- a/src/vtedefines.hh
|
||||||
|
+++ b/src/vtedefines.hh
|
||||||
|
@@ -82,8 +82,8 @@
|
||||||
|
#define VTE_CHILD_OUTPUT_PRIORITY G_PRIORITY_HIGH
|
||||||
|
#define VTE_MAX_INPUT_READ 0x1000
|
||||||
|
-#define VTE_DISPLAY_TIMEOUT 10
|
||||||
|
+#define VTE_DISPLAY_TIMEOUT 10
|
||||||
|
-#define VTE_UPDATE_TIMEOUT 15
|
||||||
|
-#define VTE_UPDATE_REPEAT_TIMEOUT 30
|
||||||
|
+#define VTE_UPDATE_TIMEOUT 5
|
||||||
|
+#define VTE_UPDATE_REPEAT_TIMEOUT 10
|
||||||
|
#define VTE_MAX_PROCESS_TIME 100
|
||||||
|
#define VTE_CELL_BBOX_SLACK 1
|
||||||
|
#define VTE_DEFAULT_UTF8_AMBIGUOUS_WIDTH 1
|
50
patches/base/webkitgtk/PasteboardGtk-fix-paste-images.patch
Normal file
50
patches/base/webkitgtk/PasteboardGtk-fix-paste-images.patch
Normal file
|
@ -0,0 +1,50 @@
|
||||||
|
diff --git b/Source/WebCore/platform/gtk/PasteboardGtk.cpp a/Source/WebCore/platform/gtk/PasteboardGtk.cpp
|
||||||
|
index fbe7198..6693af0 100644
|
||||||
|
--- b/Source/WebCore/platform/gtk/PasteboardGtk.cpp
|
||||||
|
+++ a/Source/WebCore/platform/gtk/PasteboardGtk.cpp
|
||||||
|
@@ -315,15 +315,43 @@ void Pasteboard::read(PasteboardWebContentReader& reader, WebContentReadingPolic
|
||||||
|
|
||||||
|
void Pasteboard::read(PasteboardFileReader& reader, Optional<size_t>)
|
||||||
|
{
|
||||||
|
+ WTFLogAlways("xxoo Pasteboard::read PasteboardFileReader");
|
||||||
|
if (m_selectionData) {
|
||||||
|
- for (const auto& filePath : m_selectionData->filenames())
|
||||||
|
+ WTFLogAlways("xxoo Pasteboard::read m_selectionData");
|
||||||
|
+ for (const auto& filePath : m_selectionData->filenames()) {
|
||||||
|
+ WTFLogAlways("xxoo Pasteboard::read m_selectionData reader.readFilename filePath=%s", filePath.utf8().data());
|
||||||
|
reader.readFilename(filePath);
|
||||||
|
+ }
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
+
|
||||||
|
+ WTFLogAlways("xxoo Pasteboard::read readFilePathsFromClipboard pasteboardName=%s", m_name.utf8().data());
|
||||||
|
auto filePaths = platformStrategies()->pasteboardStrategy()->readFilePathsFromClipboard(m_name);
|
||||||
|
- for (const auto& filePath : filePaths)
|
||||||
|
+ for (const auto& filePath : filePaths) {
|
||||||
|
+ WTFLogAlways("xxoo Pasteboard::read readFilePathsFromClipboard reader.readFilename filePath=%s", filePath.utf8().data());
|
||||||
|
reader.readFilename(filePath);
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ if (filePaths.isEmpty()) {
|
||||||
|
+ WTFLogAlways("xxoo Pasteboard::read readFilePathsFromClipboard got no filePaths, try readBufferFromClipboard pasteboardName=%s", m_name.utf8().data());
|
||||||
|
+
|
||||||
|
+ auto types = platformStrategies()->pasteboardStrategy()->types(m_name);
|
||||||
|
+ static const ASCIILiteral imageTypes[] = { "image/png"_s, "image/jpeg"_s, "image/gif"_s, "image/bmp"_s, "image/vnd.microsoft.icon"_s, "image/x-icon"_s };
|
||||||
|
+ for (const auto& imageType : imageTypes) {
|
||||||
|
+ if (types.contains(imageType)) {
|
||||||
|
+ WTFLogAlways("xxoo Pasteboard::read readBufferFromClipboard types contains imageType");
|
||||||
|
+ auto buffer = platformStrategies()->pasteboardStrategy()->readBufferFromClipboard(m_name, imageType);
|
||||||
|
+ // readBuffer(const String&, const String& type, Ref<SharedBuffer>&&)
|
||||||
|
+ // readImage(Ref<SharedBuffer>&&, const String&, PresentationSize = { })
|
||||||
|
+ if (!buffer->isEmpty()) {
|
||||||
|
+ reader.readBuffer(imageType, imageType, buffer.releaseNonNull());
|
||||||
|
+ WTFLogAlways("xxoo Pasteboard::read reader.readBuffer success");
|
||||||
|
+ return;
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
}
|
||||||
|
|
||||||
|
bool Pasteboard::hasData()
|
119
patches/kmods/ddcci-driver/global-control-device.patch
Normal file
119
patches/kmods/ddcci-driver/global-control-device.patch
Normal file
|
@ -0,0 +1,119 @@
|
||||||
|
diff --git a/ddcci-backlight/ddcci-backlight.c b/ddcci-backlight/ddcci-backlight.c
|
||||||
|
index 7a98522..e518bfc 100644
|
||||||
|
--- a/ddcci-backlight/ddcci-backlight.c
|
||||||
|
+++ b/ddcci-backlight/ddcci-backlight.c
|
||||||
|
@@ -29,6 +29,12 @@
|
||||||
|
#define DDCCI_MONITOR_BACKLIGHT 0x13
|
||||||
|
#define DDCCI_MONITOR_BL_WHITE 0x6B
|
||||||
|
|
||||||
|
+#define DDCCI_BL_MUX_MAX_DEVICES 8
|
||||||
|
+
|
||||||
|
+static struct backlight_device *ddcci_bl_global_control = NULL;
|
||||||
|
+static struct backlight_device *ddcci_bl_mux_devices[DDCCI_BL_MUX_MAX_DEVICES] = {NULL};
|
||||||
|
+static int ddcci_bl_mux_device_count = 0;
|
||||||
|
+
|
||||||
|
static bool convenience_symlink = true;
|
||||||
|
|
||||||
|
struct ddcci_monitor_drv_data {
|
||||||
|
@@ -101,13 +107,21 @@ static int ddcci_backlight_update_status(struct backlight_device *bl)
|
||||||
|
struct ddcci_monitor_drv_data *drv_data = bl_get_data(bl);
|
||||||
|
int brightness = bl->props.brightness;
|
||||||
|
int ret;
|
||||||
|
+ int i;
|
||||||
|
|
||||||
|
- if (bl->props.power != FB_BLANK_UNBLANK ||
|
||||||
|
- bl->props.state & BL_CORE_FBBLANK)
|
||||||
|
- brightness = 0;
|
||||||
|
+ if (drv_data == NULL) {
|
||||||
|
+ for (i = 0; i < ddcci_bl_mux_device_count; ++i) {
|
||||||
|
+ ddcci_bl_mux_devices[i]->props.brightness = bl->props.brightness;
|
||||||
|
+ ddcci_backlight_update_status(ddcci_bl_mux_devices[i]);
|
||||||
|
+ }
|
||||||
|
+ } else {
|
||||||
|
+ if (bl->props.power != FB_BLANK_UNBLANK ||
|
||||||
|
+ bl->props.state & BL_CORE_FBBLANK)
|
||||||
|
+ brightness = 0;
|
||||||
|
|
||||||
|
- ret = ddcci_monitor_writectrl(drv_data->device, drv_data->used_vcp,
|
||||||
|
- brightness);
|
||||||
|
+ ret = ddcci_monitor_writectrl(drv_data->device, drv_data->used_vcp,
|
||||||
|
+ brightness);
|
||||||
|
+ }
|
||||||
|
if (ret > 0)
|
||||||
|
ret = 0;
|
||||||
|
return ret;
|
||||||
|
@@ -119,6 +133,10 @@ static int ddcci_backlight_get_brightness(struct backlight_device *bl)
|
||||||
|
int ret;
|
||||||
|
struct ddcci_monitor_drv_data *drv_data = bl_get_data(bl);
|
||||||
|
|
||||||
|
+ if (drv_data == NULL) {
|
||||||
|
+ return bl->props.brightness;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
ret = ddcci_monitor_readctrl(drv_data->device, drv_data->used_vcp,
|
||||||
|
&value, &maxval);
|
||||||
|
if (ret < 0)
|
||||||
|
@@ -277,6 +295,7 @@ static int ddcci_monitor_probe(struct ddcci_device *dev,
|
||||||
|
{
|
||||||
|
struct ddcci_monitor_drv_data *drv_data;
|
||||||
|
struct backlight_properties props;
|
||||||
|
+ struct backlight_properties cprops;
|
||||||
|
struct backlight_device *bl = NULL;
|
||||||
|
int ret = 0;
|
||||||
|
bool support_luminance, support_bl_white;
|
||||||
|
@@ -369,6 +388,27 @@ static int ddcci_monitor_probe(struct ddcci_device *dev,
|
||||||
|
ddcci_backlight_create_symlink(dev);
|
||||||
|
}
|
||||||
|
|
||||||
|
+ if (ddcci_bl_global_control == NULL) {
|
||||||
|
+ printk(KERN_INFO "ddcci-backlight: registering global controller with brightness=%d, max_brightness=%d\n",
|
||||||
|
+ brightness, max_brightness);
|
||||||
|
+ cprops.type = BACKLIGHT_RAW;
|
||||||
|
+ cprops.max_brightness = max_brightness;
|
||||||
|
+ cprops.brightness = brightness;
|
||||||
|
+ ddcci_bl_global_control = devm_backlight_device_register(&dev->dev, "0000-ddcci_backlight_global_control",
|
||||||
|
+ &dev->dev, NULL,
|
||||||
|
+ &ddcci_backlight_ops, &cprops);
|
||||||
|
+ };
|
||||||
|
+
|
||||||
|
+ if(ddcci_bl_mux_device_count < DDCCI_BL_MUX_MAX_DEVICES) {
|
||||||
|
+ dev_info(&dev->dev, "registering backlight device %s as mux slave #%d",
|
||||||
|
+ dev_name(&dev->dev), ddcci_bl_mux_device_count);
|
||||||
|
+ ddcci_bl_mux_devices[ddcci_bl_mux_device_count] = bl;
|
||||||
|
+ dev_info(&dev->dev, "registered mux slave #%d successfully", ddcci_bl_mux_device_count);
|
||||||
|
+ ++ddcci_bl_mux_device_count;
|
||||||
|
+ } else {
|
||||||
|
+ dev_info(&dev->dev, "new backlight device added, but mux slave array is at max capacity. global control will not work for this device.");
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
goto end;
|
||||||
|
err_free:
|
||||||
|
devm_kfree(&dev->dev, drv_data);
|
||||||
|
@@ -378,8 +418,27 @@ end:
|
||||||
|
|
||||||
|
static int ddcci_monitor_remove(struct ddcci_device *dev)
|
||||||
|
{
|
||||||
|
+ int i,j;
|
||||||
|
+
|
||||||
|
dev_dbg(&dev->dev, "removing device\n");
|
||||||
|
ddcci_backlight_remove_symlink(dev);
|
||||||
|
+
|
||||||
|
+ for (i = 0; i < ddcci_bl_mux_device_count; ++i) {
|
||||||
|
+ struct backlight_device *bl = ddcci_bl_mux_devices[i];
|
||||||
|
+ printk(KERN_INFO "ddcci-backlight: scan for remove global device %d from control array\n", i);
|
||||||
|
+ if (dev == (struct ddcci_device*) bl_get_data(bl)) {
|
||||||
|
+ printk(KERN_INFO "ddcci-backlight: removing global device %d from control array\n", i);
|
||||||
|
+ ddcci_bl_mux_devices[i] = NULL;
|
||||||
|
+ for (j = i+1; j < ddcci_bl_mux_device_count; ++j) {
|
||||||
|
+ if(ddcci_bl_mux_devices[j] != NULL) {
|
||||||
|
+ printk(KERN_INFO "ddcci-backlight: adjusting global devices %d -> %d\n", j, j-1);
|
||||||
|
+ ddcci_bl_mux_devices[j-1] = ddcci_bl_mux_devices[j];
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+ --ddcci_bl_mux_device_count;
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
8
repl.nix
Normal file
8
repl.nix
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
let
|
||||||
|
flake = builtins.getFlake (toString ./.);
|
||||||
|
nixpkgs = import <nixpkgs> { };
|
||||||
|
in {
|
||||||
|
inherit flake;
|
||||||
|
inherit nixpkgs;
|
||||||
|
nixos = flake.nixosConfigurations;
|
||||||
|
}
|
BIN
secrets/builder_key.age
Normal file
BIN
secrets/builder_key.age
Normal file
Binary file not shown.
13
secrets/cachix-upload-key.age
Normal file
13
secrets/cachix-upload-key.age
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
age-encryption.org/v1
|
||||||
|
-> ssh-ed25519 NO562A wdYUFvxvT7qtZ2GjKvH5LMqwst83kiWb4wLfx7T6QSs
|
||||||
|
4Bpe9C3B11Hmqv8bk7khao+AeG+qrDBe4io477y+mCg
|
||||||
|
-> ssh-ed25519 5/zT0w r7KSc3LLqCQiGXBNgnav0StNfnVg5F9VIw2Pzw8UQhI
|
||||||
|
pMkSqshAwDLsy2IhP00E8xYTZOMDPUNRJiisH9ArUoU
|
||||||
|
-> ssh-ed25519 OxDh5w mb6tt+K0i73aGmPUzwR7+d+vjOQGfJcxHx2udZ6Q9nw
|
||||||
|
1icXi5j9nOI5zkwVzu/1K22CxBpbp6ioU9j3uNZgpBo
|
||||||
|
-> 9s8B-grease %Dt pw[YavZ RY((bY>
|
||||||
|
WL92Bw95H0c3dM+H0iUhYtoefQbM0guP69x1vCX8zxT+NTdKtAeK/Nu1RVaR4qdL
|
||||||
|
/yj5
|
||||||
|
--- psVhYZPeJN0cgQi882QC7JSj6IejJUTAkdnCHw5cRQQ
|
||||||
|
\¦Ýe˜ÑR¦
lËÚYÄÑ*^9ÍYÔJÍË%¿©‘«Í¢—Jߊí¾ÎATWE:MEÁQñ:ÃIx ÿø}î<´vß)p¬,®0Ñ`Ø$
¿‚,§ñw´e°aúNÑéŸ80öÑo‰‹éךÁ6ܸ¼£aÃ+B¼"¬
¾tþz~Ì{æé jƒç<ÊȲë\„
|
||||||
|
_"õ‚+8‰2\ò)<û ßeFd2sKèS…£þ€Œ“Y—Z, 5U×ÙníZµW>»'
|
BIN
secrets/hyprspace-key-TITAN.age
Normal file
BIN
secrets/hyprspace-key-TITAN.age
Normal file
Binary file not shown.
BIN
secrets/hyprspace-key-jericho.age
Normal file
BIN
secrets/hyprspace-key-jericho.age
Normal file
Binary file not shown.
14
secrets/ipfs-swarm-key.age
Normal file
14
secrets/ipfs-swarm-key.age
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
age-encryption.org/v1
|
||||||
|
-> ssh-ed25519 NO562A OAH7JcYyaB+KVOtZFXX7r1F8wDW+Y5BMBdhAou0kSBk
|
||||||
|
NmvNTDtaTORPSNp3pUEBtUTuOR2H4ayZPu4Z9tzPDoU
|
||||||
|
-> ssh-ed25519 5/zT0w BccoidtcwnqgbNyFylxlSe7G45whhOK+HTvLbz0nkBc
|
||||||
|
72VYuHZ/d5BQRJfJSX2nBvzK8p4wjvQqwMbLiPpDa/k
|
||||||
|
-> ssh-ed25519 OxDh5w sI9ecpbZ0U/kC8AR17X/KmzCXwXa9Bf6Hk6AqXw5pHM
|
||||||
|
83zeCBsHQPtjq4IJ2jaTqZlqL3r0ACF1eqOmFxuELEk
|
||||||
|
-> ssh-ed25519 RLSb/g t1vpmXGHm4DggmYwqov1ZrgtiwceaNfk9fZLwbkE0GM
|
||||||
|
t/yfwCIH71BAXUc05dLjc3rYfvSvjZBi0a/JB+p/Now
|
||||||
|
-> fL?\;;2-grease (s kw+w DNwK 0<gqZ
|
||||||
|
fLVDBrnwjU+6+mVwweQ6zZYOVLYHLd1QGxckJaS2wL9kIWEyXCkIy+U6DfEFz+kc
|
||||||
|
TtuvyGolurlZ+IYfMo7vorHpBw4r9CxP3IcnqTlBwQ
|
||||||
|
--- GQMKSU2Zm8Ac1pxu89zi/Mh+wzdU0dUPMrQp6GONJ+4
|
||||||
|
ñ‹=°ËVmP>§‰íƒª“ƒš¢©¶áæ{„4 õW<”ÀïE4?^Ï<>‚ý@N/ýƒô.ÛäCñóºNÈv¶«Ï¸åš;XSh¤šâGi¢í<C2A2>ëßþJI¶ù@v<>‹_yÂ
ø<>éÖžs²œ‹uع·‘€L˜{{[d:¬ÿ2ÿ
|
15
secrets/secrets.nix
Normal file
15
secrets/secrets.nix
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
let
|
||||||
|
max = (import ../users/max/userinfo.nix null).sshKeys;
|
||||||
|
hosts = import ../hosts;
|
||||||
|
systemKeys = x: x.ssh.id.publicKey or null;
|
||||||
|
in with hosts;
|
||||||
|
{
|
||||||
|
"builder_key.age".publicKeys = max ++ map systemKeys [ TITAN jericho ];
|
||||||
|
"cachix-upload-key.age".publicKeys = max ++ map systemKeys [ TITAN ];
|
||||||
|
"hyprspace-key-TITAN.age".publicKeys = max ++ map systemKeys [ TITAN ];
|
||||||
|
"hyprspace-key-jericho.age".publicKeys = max ++ map systemKeys [ jericho ];
|
||||||
|
"ipfs-swarm-key.age".publicKeys = max ++ map systemKeys [ TITAN jericho ];
|
||||||
|
"transmission-rpc-password.age".publicKeys = max ++ map systemKeys [ TITAN ];
|
||||||
|
"wireguard-key-upload.age".publicKeys = max ++ map systemKeys [ TITAN ];
|
||||||
|
"shadow-max.age".publicKeys = max ++ map systemKeys [ TITAN jericho ];
|
||||||
|
}
|
15
secrets/shadow-max.age
Normal file
15
secrets/shadow-max.age
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
age-encryption.org/v1
|
||||||
|
-> ssh-ed25519 NO562A Y73DqIRov+MWeXzgES1YHSRLn3C66IKeLp/V/pIL32U
|
||||||
|
Ms1E6/CHgMX5cLSnO1aRnY6OBAL98XtHL1Hvf0KQdL4
|
||||||
|
-> ssh-ed25519 5/zT0w g28b5BF0FdtiALo2HlqxQ0s72XIs9EyJd3gc5MB76Fw
|
||||||
|
Iz18IvwM3aDAdiPabbRoJHkk2F6PZDTb5vy8APrnQRY
|
||||||
|
-> ssh-ed25519 OxDh5w WcZ+UJ5eWb6jArWAW/TE2Np69jWqF3MtgQ3GwhW/tiA
|
||||||
|
SIS6KC6NL4Funn6uLq30ePRGTVOaYD7zg5rZ68fwiCs
|
||||||
|
-> ssh-ed25519 RLSb/g FnP/tvE4pAn55vAiSO3mFzZscEJuH1xi6AY9FB/8CyY
|
||||||
|
q5aVu+yIIpoW3UOZtowzHSbiWgr0W3XUfLrKd79Wr2o
|
||||||
|
-> :-grease FPymBk tj?}O {@Wd 4Z9!L+
|
||||||
|
gyOW8CULRJiRXisjGrX4TTt4zeN18eGfZMGUbh4Njhiuu1naN/Nn
|
||||||
|
--- l/FkE/1S1CxRRw3FYEqDSoKeBJLvdhfN2lYryELRabk
|
||||||
|
P°/÷
|
||||||
|
4æ‹•0l',çÙWNèì¯3ýâ7êU¨*’<ôDpWFf% áy$u± 3”¥~’—…T8äbwŽuø·OôâÝÀV€ÿ…õ
|
||||||
|
p›'Æy@ñŠµ¶#ƒ}r’*ÚYŽnË„ 0ê<30>:È„É··¹Â±Æw\܈œîiIo=ŒG<C592>Á’Œ<>Ø
|
11
secrets/transmission-rpc-password.age
Normal file
11
secrets/transmission-rpc-password.age
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
age-encryption.org/v1
|
||||||
|
-> ssh-ed25519 NO562A RvwoHSrUYObiumlpczjWPzRyowLSckQ/WtNrVnJkvjc
|
||||||
|
NNw6Jxq4ydAdka1M3bke7ZNN85zagltduO7Q189Gp7Y
|
||||||
|
-> ssh-ed25519 5/zT0w VRmTc6SLcyhX2SBLQ96Un8ZqkfomWfFZUkSlmjceqzQ
|
||||||
|
NlhhrCXYcV9+F1U56eWStq1Yvx+5nrFylOKawKijqFM
|
||||||
|
-> ssh-ed25519 OxDh5w I3BpVIe/tyzCaWaHFGbmvSyBnwbvotKmscreC9VuFwA
|
||||||
|
rEG3BjTngh8C+4fk1TMVOybjBBnslzxgUAPwRhmdYlQ
|
||||||
|
-> 2l-grease |y;2B\
|
||||||
|
cERUX8x8PtS+yfv5Fqye0S/iNNHIayaMtl2eu32sAOQaxFs
|
||||||
|
--- 8+ewYWTKGNaCMEOA8/pbAu62IX9gz/zPW/etK1nq6dU
|
||||||
|
MçÂÝ…ý<
A¾¸Ú«´>Îå†"jÿ˜¦nJ8F‚ÉôRL‘ö-æ)yûhÏ'«yŽÌ†Î‡Z‹Ov
cBŸRµ0í_‡Ìvʵ"4ÍX>H´’¹?<3F>6Ï”8†÷0¯«
|
BIN
secrets/wireguard-key-upload.age
Normal file
BIN
secrets/wireguard-key-upload.age
Normal file
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue