Refactor
This commit is contained in:
parent
556e0e1eb2
commit
e0a82ee731
49 changed files with 1076 additions and 765 deletions
93
hm/apps/gitea.nix
Normal file
93
hm/apps/gitea.nix
Normal file
|
|
@ -0,0 +1,93 @@
|
|||
_: let
|
||||
domain = "git.lomig.me"; # <-- mets ton domaine
|
||||
giteaHttpPort = 3000; # port local de Gitea
|
||||
in {
|
||||
########################################
|
||||
# Base système
|
||||
########################################
|
||||
networking.firewall.allowedTCPPorts = [80 443 22]; # HTTP(S) + SSH (22)
|
||||
services = {
|
||||
openssh.enable = true; # si tu veux aussi OpenSSH pour le reste
|
||||
|
||||
########################################
|
||||
# Base de données Postgres
|
||||
########################################
|
||||
postgresql = {
|
||||
enable = true;
|
||||
ensureDatabases = ["gitea"];
|
||||
ensureUsers = [
|
||||
{
|
||||
name = "gitea";
|
||||
ensureDBOwnership = true;
|
||||
}
|
||||
];
|
||||
};
|
||||
|
||||
########################################
|
||||
# Gitea
|
||||
########################################
|
||||
gitea = {
|
||||
enable = true;
|
||||
appName = "Gitea";
|
||||
user = "gitea"; # user système service
|
||||
database = {
|
||||
type = "postgres";
|
||||
user = "gitea";
|
||||
name = "gitea";
|
||||
host = "127.0.0.1";
|
||||
};
|
||||
};
|
||||
|
||||
# Répertoire de données (par défaut: /var/lib/gitea)
|
||||
stateDir = "/var/lib/gitea";
|
||||
|
||||
# Réglages gitea.ini
|
||||
settings = {
|
||||
server = {
|
||||
PROTOCOL = "http";
|
||||
HTTP_ADDR = "127.0.0.1";
|
||||
HTTP_PORT = giteaHttpPort;
|
||||
DOMAIN = domain;
|
||||
ROOT_URL = "https://${domain}/";
|
||||
SSH_DOMAIN = domain;
|
||||
|
||||
# SSH intégré par Gitea (pratique : pas besoin de configurer un port séparé)
|
||||
START_SSH_SERVER = true;
|
||||
SSH_LISTEN_PORT = 2222; # port interne Gitea
|
||||
SSH_PORT = 22; # port public affiché dans les URLs clone
|
||||
};
|
||||
|
||||
service = {
|
||||
DISABLE_REGISTRATION = true; # tu créeras les comptes toi‑même
|
||||
REQUIRE_SIGNIN_VIEW = false;
|
||||
REGISTER_EMAIL_CONFIRM = true;
|
||||
};
|
||||
|
||||
# SMTP (remplace par ton vrai relais)
|
||||
|
||||
log = {
|
||||
MODE = "console";
|
||||
LEVEL = "Info";
|
||||
};
|
||||
};
|
||||
|
||||
# Création d'un admin au premier démarrage (facultatif mais pratique)
|
||||
# Remplace le mot de passe et l’email :
|
||||
# L'utilisateur est créé si inexistant.
|
||||
};
|
||||
|
||||
########################################
|
||||
# Caddy reverse proxy + TLS
|
||||
########################################
|
||||
services.caddy = {
|
||||
enable = true;
|
||||
virtualHosts."${domain}".extraConfig = ''
|
||||
encode zstd gzip
|
||||
reverse_proxy 127.0.0.1:${toString giteaHttpPort}
|
||||
'';
|
||||
# Par défaut, Caddy va récupérer un certificat Let's Encrypt pour le domaine public
|
||||
# Si domaine local sans DNS public, ajoute `tls internal` dans extraConfig.
|
||||
};
|
||||
}
|
||||
# vim: set ts=2 sw=2 sts=2 et :
|
||||
|
||||
12
hm/common/browser.nix
Normal file
12
hm/common/browser.nix
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
_: {
|
||||
programs.firefox = {
|
||||
enable = true;
|
||||
languagePacks = ["fr"];
|
||||
};
|
||||
programs.floorp = {
|
||||
enable = true;
|
||||
languagePacks = ["fr"];
|
||||
};
|
||||
}
|
||||
# vim: set ts=2 sw=2 sts=2 et :
|
||||
|
||||
1
hm/common/colours.nix
Normal file
1
hm/common/colours.nix
Normal file
|
|
@ -0,0 +1 @@
|
|||
_: {}
|
||||
123
hm/common/nvim.nix
Normal file
123
hm/common/nvim.nix
Normal file
|
|
@ -0,0 +1,123 @@
|
|||
{pkgs, ...}: {
|
||||
programs.neovim = {
|
||||
enable = true;
|
||||
withNodeJs = true;
|
||||
withPython3 = true;
|
||||
|
||||
defaultEditor = true;
|
||||
viAlias = true;
|
||||
vimAlias = true;
|
||||
|
||||
coc.enable = true;
|
||||
|
||||
plugins = with pkgs.vimPlugins; [
|
||||
goyo-vim
|
||||
nerdtree
|
||||
limelight-vim
|
||||
];
|
||||
|
||||
extraConfig = ''
|
||||
set number
|
||||
set relativenumber
|
||||
set scrolloff=4
|
||||
set signcolumn=yes
|
||||
|
||||
set mouse=a
|
||||
set clipboard=unnamedplus
|
||||
|
||||
set ignorecase
|
||||
set smartcase
|
||||
set incsearch
|
||||
|
||||
set tabstop=2
|
||||
set shiftwidth=2
|
||||
set expandtab
|
||||
|
||||
set splitright
|
||||
set splitbelow
|
||||
set termguicolors
|
||||
set updatetime=300
|
||||
|
||||
set undofile
|
||||
|
||||
let mapleader = " "
|
||||
|
||||
colorscheme retrobox
|
||||
syntax enable
|
||||
|
||||
nnoremap <F10> :Goyo<CR>
|
||||
inoremap <F10> <Esc> :Goyo<CR>
|
||||
|
||||
let g:goyo_width = 100
|
||||
|
||||
command! Q qall!
|
||||
|
||||
" --- Fichiers d’état : swap / backup / undo ---
|
||||
let s:state = has('unix') ? $HOME . '/.local/state/nvim' : $HOME . '/nvim-state'
|
||||
|
||||
" Crée les dossiers si besoin (silencieusement)
|
||||
silent! call mkdir(s:state . '/swap', 'p')
|
||||
silent! call mkdir(s:state . '/backup', 'p')
|
||||
silent! call mkdir(s:state . '/undo', 'p')
|
||||
|
||||
augroup MdNoSuggest
|
||||
autocmd!
|
||||
autocmd FileType markdown let b:coc_suggest_disable = 1 | let b:coc_diagnostic_disable = 1
|
||||
augroup END
|
||||
|
||||
" Goyo : pas de coupure de mots + Limelight auto
|
||||
autocmd User GoyoEnter
|
||||
\ let w:_wrap=&l:wrap | let w:_tw=&l:textwidth | let w:_fo=&l:formatoptions |
|
||||
\ setlocal wrap linebreak nolist textwidth=0 |
|
||||
\ setlocal formatoptions-=t formatoptions-=c formatoptions-=r formatoptions-=o formatoptions-=l |
|
||||
\ Limelight
|
||||
|
||||
autocmd User GoyoLeave
|
||||
\ if exists('w:_wrap') | let &l:wrap=w:_wrap | unlet w:_wrap | endif |
|
||||
\ if exists('w:_tw') | let &l:textwidth=w:_tw | unlet w:_tw | endif |
|
||||
\ if exists('w:_fo') | let &l:formatoptions=w:_fo | unlet w:_fo | endif |
|
||||
\ Limelight!
|
||||
|
||||
" Swap files (fichiers d’échange)
|
||||
set directory^=~/.local/state/nvim/swap//
|
||||
|
||||
" Backups (copie avant écriture) – optionnel mais utile
|
||||
set backup
|
||||
set writebackup
|
||||
set backupdir=~/.local/state/nvim/backup//
|
||||
|
||||
" Undo persistant (♥ pour la rédaction)
|
||||
set undofile
|
||||
set undodir=~/.local/state/nvim/undo//
|
||||
|
||||
" --- Résolution auto des conflits de swap ---
|
||||
augroup ResolveSwap
|
||||
autocmd!
|
||||
" Si un swap existe quand on ouvre un fichier…
|
||||
autocmd SwapExists * call s:ResolveSwap(v:swapname, expand('<afile>'))
|
||||
augroup END
|
||||
|
||||
function! s:ResolveSwap(swapname, filename) abort
|
||||
" Si le fichier sur disque est plus récent que le swap -> on édite quand même (e)
|
||||
if getftime(a:filename) > getftime(a:swapname)
|
||||
let v:swapchoice = 'e' " edit anyway (ignore le swap)
|
||||
else
|
||||
" Sinon, ouvre en lecture seule par prudence (o).
|
||||
" Tu pourras décider ensuite (écraser, récupérer, diff).
|
||||
let v:swapchoice = 'o'
|
||||
endif
|
||||
endfunction
|
||||
|
||||
" Rendre les messages de swap moins dramatiques
|
||||
set shortmess+=A
|
||||
'';
|
||||
|
||||
extraPackages = with pkgs; [
|
||||
ripgrep
|
||||
fd
|
||||
xclip
|
||||
];
|
||||
};
|
||||
}
|
||||
# vim: set ts=2 sw=2 sts=2 et :
|
||||
|
||||
32
hm/common/zsh.nix
Normal file
32
hm/common/zsh.nix
Normal file
|
|
@ -0,0 +1,32 @@
|
|||
_: {
|
||||
programs.dircolors.enableZshIntegration = true;
|
||||
programs.zsh = {
|
||||
autosuggestion.enable = true;
|
||||
dirHashes = {
|
||||
dl = "$HOME/Téléchargements";
|
||||
nix = "$HOME/nixos-config";
|
||||
};
|
||||
enable = true;
|
||||
enableCompletion = true;
|
||||
history = {
|
||||
append = true;
|
||||
extended = true;
|
||||
findNoDups = true;
|
||||
ignoreAllDups = true;
|
||||
ignoreSpace = true;
|
||||
ignorePatterns = ["rm *" "cd *" "ls *" "df *" "du *" "fastfetch" "tree" "pwd" "upd"];
|
||||
saveNoDups = false;
|
||||
};
|
||||
shellAliases = {
|
||||
h = "history";
|
||||
upd = "sudo nixos-rebuild switch --flake $HOME/nixos-config#pennsardin; source ~/.zshrc";
|
||||
};
|
||||
shellGlobalAliases = {
|
||||
G = "| grep";
|
||||
M = "| more";
|
||||
};
|
||||
syntaxHighlighting.enable = true;
|
||||
};
|
||||
}
|
||||
# vim: set ts=2 sw=2 sts=2 et :
|
||||
|
||||
150
hm/desktop/bspwm.nix
Normal file
150
hm/desktop/bspwm.nix
Normal file
|
|
@ -0,0 +1,150 @@
|
|||
# hm/desktop/bspwm.nix
|
||||
{ pkgs, ... }:
|
||||
{
|
||||
home.packages = with pkgs; [
|
||||
bspwm sxhkd xorg.xinit xterm alacritty rofi feh font-awesome
|
||||
picom xorg.xset xidlehook betterlockscreen pywal16 imagemagick
|
||||
pulsemixer ranger jq file highlight unzip
|
||||
];
|
||||
|
||||
# Gère le ssh-agent proprement côté user
|
||||
services.ssh-agent.enable = true;
|
||||
|
||||
xsession.enable = true;
|
||||
xsession.windowManager.bspwm = {
|
||||
enable = true;
|
||||
|
||||
# Démarrages au login X
|
||||
startupPrograms = [
|
||||
"sxhkd -m 1"
|
||||
"setxkbmap bepovim"
|
||||
"xrandr --output DisplayPort-1 --rate 60 --pos 0x0"
|
||||
"while pgrep -x polybar >/dev/null; do sleep 0.2; done; polybar main"
|
||||
# fond d’écran (feh)
|
||||
"bash ~/.fehbg"
|
||||
];
|
||||
|
||||
extraConfig = ''
|
||||
bspc config borderless_monocle true
|
||||
bspc config gapless_monocle true
|
||||
bspc config single_monocle true
|
||||
bspc monitor -d I II III IV V VI
|
||||
'';
|
||||
};
|
||||
|
||||
# Réglages X (corrigé : c'était 'xsession s noblank' -> 'xset s noblank')
|
||||
xsession.initExtra = ''
|
||||
xset s 300 300
|
||||
xset s on
|
||||
xset s noblank
|
||||
xset +dpms
|
||||
xset dpms 0 0 500
|
||||
'';
|
||||
|
||||
# sxhkd
|
||||
services.sxhkd = {
|
||||
enable = true;
|
||||
extraOptions = [ "-m" "1" ];
|
||||
keybindings = {
|
||||
"super + Return" = "alacritty";
|
||||
"super + c" = "bspc node -c";
|
||||
"Menu" = "rofi -show drun";
|
||||
"super + space" = "rofi -show drun";
|
||||
|
||||
"F1" = "bspc desktop -f ^1";
|
||||
"F2" = "bspc desktop -f ^2";
|
||||
"F3" = "bspc desktop -f ^3";
|
||||
"F4" = "bspc desktop -f ^4";
|
||||
"F5" = "bspc desktop -f ^5";
|
||||
"F6" = "bspc desktop -f ^6";
|
||||
|
||||
"shift + F1" = "bspc node -d ^1 --follow";
|
||||
"shift + F2" = "bspc node -d ^2 --follow";
|
||||
"shift + F3" = "bspc node -d ^3 --follow";
|
||||
"shift + F4" = "bspc node -d ^4 --follow";
|
||||
"shift + F5" = "bspc node -d ^5 --follow";
|
||||
"shift + F6" = "bspc node -d ^6 --follow";
|
||||
|
||||
"super + h" = "bspc node -f west";
|
||||
"super + j" = "bspc node -f south";
|
||||
"super + k" = "bspc node -f north";
|
||||
"super + l" = "bspc node -f east";
|
||||
|
||||
"super + shift + h" = "bspc node -s west";
|
||||
"super + shift + j" = "bspc node -s south";
|
||||
"super + shift + k" = "bspc node -s north";
|
||||
"super + shift + l" = "bspc node -s east";
|
||||
|
||||
"super + f" = "bspc node -t fullscreen";
|
||||
"super + s" = "bspc node -t floating";
|
||||
"super + shift + t" = "bspc node -t pseudo_tiled";
|
||||
"super + t" = "bspc node -t tiled";
|
||||
};
|
||||
};
|
||||
|
||||
# xidlehook (user service)
|
||||
systemd.user.services.xidlehook = {
|
||||
Unit.Description = "Idle: lock at 5min, suspend at ~8min";
|
||||
Service = {
|
||||
ExecStart = ''
|
||||
${pkgs.xidlehook}/bin/xidlehook \
|
||||
--detect-sleep \
|
||||
--not-when-fullscreen \
|
||||
--timer 300 "${pkgs.betterlockscreen}/bin/betterlockscreen -l dim" "" \
|
||||
--timer 500 "systemctl suspend" ""
|
||||
'';
|
||||
Restart = "always";
|
||||
};
|
||||
Install.WantedBy = [ "graphical-session.target" ];
|
||||
};
|
||||
|
||||
# polybar (config intégrée pour démarrer simple)
|
||||
services.polybar = {
|
||||
enable = true;
|
||||
script = "polybar main &";
|
||||
config = {
|
||||
"bar/main" = {
|
||||
width = "100%";
|
||||
height = "28";
|
||||
font-1 = "Font Awesome 6 Free:style=Solid:pixelsize=10;2";
|
||||
modules-left = "bspwm";
|
||||
modules-center = "date";
|
||||
modules-right = "pulseaudio memory cpu";
|
||||
};
|
||||
"module/bspwm" = {
|
||||
type = "internal/bspwm";
|
||||
label-focused = "%name%";
|
||||
label-focused-foreground = "#e6e0de";
|
||||
label-focused-padding = 2;
|
||||
label-occupied = "%name%";
|
||||
label-occupied-padding = 2;
|
||||
label-urgent = "%name%";
|
||||
label-urgent-background = "#e42127";
|
||||
label-urgent-foreground = "#ffffff";
|
||||
label-empty = "%name%";
|
||||
label-empty-foreground = "#645d56";
|
||||
label-empty-padding = 2;
|
||||
};
|
||||
"module/date" = {
|
||||
type = "internal/date";
|
||||
interval = 60;
|
||||
date = "%d-%m-%Y %H:%M";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
# alacritty
|
||||
programs.alacritty = {
|
||||
enable = true;
|
||||
settings = {
|
||||
general.import = [ "~/.cache/wal/colors-alacritty.toml" ];
|
||||
font = {
|
||||
normal = { family = "Iosevka Nerd Font"; style = "Regular"; };
|
||||
bold = { family = "Iosevka Nerd Font"; style = "Bold"; };
|
||||
italic = { family = "Iosevka Nerd Font"; style = "Italic"; };
|
||||
size = 9;
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
|
||||
50
hm/desktop/common/picom.nix
Normal file
50
hm/desktop/common/picom.nix
Normal file
|
|
@ -0,0 +1,50 @@
|
|||
_: {
|
||||
services.picom = {
|
||||
enable = true;
|
||||
backend = "glx"; # plus fluide si ta carte gère bien OpenGL
|
||||
fade = true;
|
||||
fadeDelta = 5; # vitesse fondu
|
||||
shadow = true;
|
||||
shadowOpacity = 0.5;
|
||||
vSync = true; # évite le tearing
|
||||
|
||||
settings = {
|
||||
# Transparence
|
||||
inactive-opacity = 0.80;
|
||||
active-opacity = 0.9;
|
||||
frame-opacity = 0.90;
|
||||
inactive-opacity-override = false;
|
||||
|
||||
# Coins arrondis
|
||||
corner-radius = 8;
|
||||
round-borders = 1;
|
||||
rounded-corners-exclude = [
|
||||
"class_g = 'Polybar'"
|
||||
"class_g = 'Rofi'"
|
||||
];
|
||||
|
||||
# Flou subtil
|
||||
blur-method = "dual_kawase";
|
||||
blur-strength = 4;
|
||||
blur-background = true;
|
||||
blur-background-frame = true;
|
||||
blur-background-fixed = false;
|
||||
blur-background-exclude = [
|
||||
"class_g = 'Polybar'"
|
||||
"class_g = 'Rofi'"
|
||||
"class_g = 'Gimp'"
|
||||
"window_type = 'dock'"
|
||||
];
|
||||
|
||||
# Exclusions ombres
|
||||
shadow-exclude = [
|
||||
"class_g = 'Polybar'"
|
||||
"class_g = 'Rofi'"
|
||||
"window_type = 'dock'"
|
||||
"window_type = 'desktop'"
|
||||
];
|
||||
};
|
||||
};
|
||||
}
|
||||
# vim: set ts=2 sw=2 sts=2 et :
|
||||
|
||||
25
hm/users/lomig.nix
Normal file
25
hm/users/lomig.nix
Normal file
|
|
@ -0,0 +1,25 @@
|
|||
{pkgs, ...}: {
|
||||
imports = [
|
||||
../../hm/common/browser.nix
|
||||
../common/nvim.nix
|
||||
../../hm/common/zsh.nix
|
||||
../desktop/bspwm.nix
|
||||
];
|
||||
home.stateVersion = "25.05"; # ou ton actuelle
|
||||
home = {
|
||||
username = "lomig";
|
||||
homeDirectory = "/home/lomig";
|
||||
packages = with pkgs; [
|
||||
bat
|
||||
fastfetch
|
||||
nerd-fonts.iosevka
|
||||
obsidian
|
||||
smug
|
||||
telegram-desktop
|
||||
tree
|
||||
];
|
||||
};
|
||||
programs.zsh.enable = true;
|
||||
}
|
||||
# vim: set ts=2 sw=2 sts=2 et :
|
||||
|
||||
Loading…
Add table
Add a link
Reference in a new issue