16 Commits

Author SHA1 Message Date
9a410f75d8 Sync patches with nixpkgs 2025-04-21 17:34:55 +00:00
7b09716347 Update documentation (appvm is now available in nixpkgs) 2025-04-21 17:33:55 +00:00
6ac189e1e8 Replace deprecated defaultConfig with def in xmonad config 2025-04-21 17:14:32 +00:00
4ac4969b66 Add label to filesystem of QEMU image 2025-04-21 17:12:05 +00:00
17f17be784 fix ethernet device pci slot conflict 2022-05-23 19:13:51 +00:00
467f74f19a Update README.md 2022-05-23 19:10:39 +00:00
ce92ddf1b9 Make sure xmonad always uses the latest libc 2021-12-20 13:48:24 +00:00
d698f058ff Fix display manager configuration for 21.11 2021-12-20 13:47:03 +00:00
84374314a2 Use per-VM qcow2, remove it after the start 2021-12-20 13:44:20 +00:00
a3bd38c243 gofmt 2021-12-20 13:42:40 +00:00
5753321877 Fix 9p mount of /nix/store
This fixes the following error during stage 1:
9pnet_virtio: no channels available for device nix-store
2021-12-20 13:40:52 +00:00
c6159a7925 Update vendorSha256 2021-12-20 13:40:52 +00:00
2560e852df Remove deprecated goPackagePath attribute
Building otherwise fails with the following error:
`goPackagePath` is not needed with `buildGoModule`
2021-12-20 13:40:52 +00:00
f063f2a90c docs/installation: fix typo 2021-12-20 13:40:52 +00:00
33facb2321 Update go-libvirt
Resolves #26
2021-11-04 13:24:32 +00:00
9142fe53c6 Remove donate 2020-12-16 16:51:48 +00:00
13 changed files with 102 additions and 182 deletions

View File

@ -1,25 +0,0 @@
name: donate
on:
issues:
types: [opened, closed]
schedule:
- cron: '35 * * * *' # for updating balance
jobs:
comment:
runs-on: ubuntu-latest
steps:
- env:
# https://github.com/jollheef/donate/blob/master/dashboard/whitelist.go
DASHBOARD_ACCESS_TOKEN: ${{ secrets.DONATE_DASHBOARD_ACCESS_TOKEN }}
# the scope is current repository only
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
TOOL: "https://github.com/jollheef/donate/archive/master.tar.gz"
run: |
curl -L https://nixos.org/nix/install | sh
. ~/.nix-profile/etc/profile.d/nix.sh
# Use latest stable nixpkgs channel
nix-channel --add https://nixos.org/channels/nixos-20.03 nixpkgs
nix-channel --update
nix run -f $TOOL -c donate-ci

View File

@ -1,6 +1,4 @@
[![Documentation Status](https://readthedocs.org/projects/appvm/badge/?version=latest)](https://appvm.readthedocs.io/en/latest/?badge=latest) [![Documentation Status](https://readthedocs.org/projects/appvm/badge/?version=latest)](https://appvm.readthedocs.io/en/latest/?badge=latest)
[![Donate](https://img.shields.io/badge/Donate-PayPal-green.svg)](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=R8W2UQPZ5X5JE&source=url)
[![Donate](https://img.shields.io/badge/Donate-BitCoin-green.svg)](https://blockchair.com/bitcoin/address/bc1q23fyuq7kmngrgqgp6yq9hk8a5q460f39m8nv87)
# Nix application VMs: security through virtualization # Nix application VMs: security through virtualization

View File

@ -31,13 +31,12 @@ import (
kingpin "gopkg.in/alecthomas/kingpin.v2" kingpin "gopkg.in/alecthomas/kingpin.v2"
) )
type networkModel int type networkModel int
const ( const (
networkOffline networkModel = iota networkOffline networkModel = iota
networkQemu networkModel = iota networkQemu networkModel = iota
networkLibvirt networkModel = iota networkLibvirt networkModel = iota
) )
func list(l *libvirt.Libvirt) { func list(l *libvirt.Libvirt) {
@ -162,9 +161,13 @@ func generateVM(path, name string, verbose bool) (realpath, reginfo, qcow2 strin
syscall.Unlink("result") syscall.Unlink("result")
qcow2 = os.Getenv("HOME") + "/appvm/.fake.qcow2" tmpraw := os.Getenv("HOME") + "/appvm/." + name + ".tmp.raw"
qcow2 = os.Getenv("HOME") + "/appvm/." + name + ".fake.qcow2"
if _, e := os.Stat(qcow2); os.IsNotExist(e) { if _, e := os.Stat(qcow2); os.IsNotExist(e) {
system.System("qemu-img", "create", "-f", "qcow2", qcow2, "40M") system.System("qemu-img", "create", "-f", "raw", tmpraw, "40M")
system.System("mkfs.ext4", "-L", "nixos", tmpraw)
system.System("qemu-img", "convert", "-f", "raw", "-O", "qcow2", tmpraw, qcow2)
system.System("rm", tmpraw)
} }
return return
@ -178,7 +181,7 @@ func isRunning(l *libvirt.Libvirt, name string) bool {
func generateAppVM(l *libvirt.Libvirt, func generateAppVM(l *libvirt.Libvirt,
nixName, vmName, appvmPath, sharedDir string, nixName, vmName, appvmPath, sharedDir string,
verbose bool, network networkModel, gui bool) (err error) { verbose bool, network networkModel, gui bool) (qcow2 string, err error) {
realpath, reginfo, qcow2, err := generateVM(appvmPath, nixName, verbose) realpath, reginfo, qcow2, err := generateVM(appvmPath, nixName, verbose)
if err != nil { if err != nil {
@ -271,8 +274,9 @@ func start(l *libvirt.Libvirt, name string, verbose bool, network networkModel,
go stupidProgressBar() go stupidProgressBar()
} }
err := generateAppVM(l, name, vmName, appvmPath, sharedDir, qcow2, err := generateAppVM(l, name, vmName, appvmPath, sharedDir,
verbose, network, gui) verbose, network, gui)
defer os.Remove(qcow2)
if err != nil { if err != nil {
log.Fatal(err) log.Fatal(err)
} }
@ -433,7 +437,7 @@ func parseNetworkModel(flagOffline bool, flagNetworking string) networkModel {
if flagNetworking == "qemu" { if flagNetworking == "qemu" {
return networkQemu return networkQemu
} }
return networkQemu // qemu is the default network model return networkQemu // qemu is the default network model
} }
var configDir = os.Getenv("HOME") + "/.config/appvm/" var configDir = os.Getenv("HOME") + "/.config/appvm/"

View File

@ -16,8 +16,8 @@ var base_nix = `
services.xserver = { services.xserver = {
enable = true; enable = true;
desktopManager.xterm.enable = false; desktopManager.xterm.enable = false;
displayManager.lightdm = { displayManager = {
enable = true; lightdm.enable = true;
autoLogin = { autoLogin = {
enable = true; enable = true;
user = "user"; user = "user";
@ -37,7 +37,7 @@ var base_nix = `
environment.etc."xmonad.hs".text = '' environment.etc."xmonad.hs".text = ''
import XMonad import XMonad
main = xmonad defaultConfig main = xmonad def
{ workspaces = [ "" ] { workspaces = [ "" ]
, borderWidth = 0 , borderWidth = 0
, startupHook = startup , startupHook = startup
@ -51,8 +51,7 @@ startup = do
systemd.services.home-user-build-xmonad = { systemd.services.home-user-build-xmonad = {
description = "Link xmonad configuration"; description = "Link xmonad configuration";
serviceConfig = { serviceConfig = {
ConditionFileNotEmpty = "!/home/user/.xmonad/xmonad.hs"; ExecStart = "/bin/sh -c 'mkdir -p /home/user/.xmonad && ln -sf /etc/xmonad.hs /home/user/.xmonad/xmonad.hs && /run/current-system/sw/bin/xmonad --recompile'";
ExecStart = "/bin/sh -c 'mkdir -p /home/user/.xmonad && ln -s /etc/xmonad.hs /home/user/.xmonad/xmonad.hs'";
RemainAfterExit = "yes"; RemainAfterExit = "yes";
User = "user"; User = "user";
Restart = "on-failure"; Restart = "on-failure";

View File

@ -16,12 +16,9 @@ buildGoModule rec {
buildInputs = [ makeWrapper ]; buildInputs = [ makeWrapper ];
goPackagePath = "code.dumpstack.io/tools/${pname}";
src = ./.; src = ./.;
vendorSha256 = "1aimli23jdqv8rifsn22qfbj2c0nc0s5czsd8qprhnr4hcsbdnkf"; vendorSha256 = "sha256-8eU+Mf5dxL/bAMMShXvj8I1Kdd4ysBTWvgYIXwLStPI=";
modSha256 = "${vendorSha256}"; # backward compatibility
postFixup = '' postFixup = ''
wrapProgram $out/bin/appvm \ wrapProgram $out/bin/appvm \

View File

@ -4,21 +4,11 @@ Installation
NixOS NixOS
----- -----
First, clone this repo. Then do this: virtualisation.appvm = {
/etc/nixos/configuration.nix::
imports = [
/path/to/repo/nixos
];
virtualizatiom.appvm = {
enable = true; enable = true;
user = "${username}"; user = "${username}";
}; };
This is a temporary solution until appvm is upstreamed to nixpkgs or Nix flakes are released.
Ubuntu 20.04 Ubuntu 20.04
------ ------

12
go.mod
View File

@ -1,14 +1,14 @@
module code.dumpstack.io/tools/appvm module code.dumpstack.io/tools/appvm
go 1.14 go 1.16
require ( require (
github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751 // indirect github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751 // indirect
github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d // indirect github.com/alecthomas/units v0.0.0-20210927113745-59d0afb8317a // indirect
github.com/digitalocean/go-libvirt v0.0.0-20190715144809-7b622097a793 github.com/digitalocean/go-libvirt v0.0.0-20210723161134-761cfeeb5968
github.com/go-cmd/cmd v1.1.0 github.com/go-cmd/cmd v1.3.1
github.com/hanwen/go-fuse/v2 v2.0.3 github.com/hanwen/go-fuse/v2 v2.1.0
github.com/jollheef/go-system v0.0.0-20160710075518-6ed6b1d2b8db github.com/jollheef/go-system v0.0.0-20160710075518-6ed6b1d2b8db
github.com/olekukonko/tablewriter v0.0.4 github.com/olekukonko/tablewriter v0.0.5
gopkg.in/alecthomas/kingpin.v2 v2.2.6 gopkg.in/alecthomas/kingpin.v2 v2.2.6
) )

62
go.sum
View File

@ -1,36 +1,62 @@
github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751 h1:JYp7IbQjafoB+tBA3gMyHYHrpOtNuDiK/uB5uXxq5wM= github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751 h1:JYp7IbQjafoB+tBA3gMyHYHrpOtNuDiK/uB5uXxq5wM=
github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d h1:UQZhZ2O0vMHr2cI+DC1Mbh0TJxzA3RcLoMsFw+aXw7E= github.com/alecthomas/units v0.0.0-20210927113745-59d0afb8317a h1:E/8AP5dFtMhl5KPJz66Kt9G0n+7Sn41Fy1wv9/jHOrc=
github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho= github.com/alecthomas/units v0.0.0-20210927113745-59d0afb8317a/go.mod h1:OMCwj8VM1Kc9e19TLln2VL61YJF0x1XFtfdL4JdbSyE=
github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8= github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/digitalocean/go-libvirt v0.0.0-20190715144809-7b622097a793 h1:+ItaX1GKKT70bYwazNtWeYz8QBfirNC85J70psPGgN0= github.com/digitalocean/go-libvirt v0.0.0-20210723161134-761cfeeb5968 h1:ZdYBqLPrXioo+1Z97PWaTK4+jRcS45BI6JlepKtkPKI=
github.com/digitalocean/go-libvirt v0.0.0-20190715144809-7b622097a793/go.mod h1:PRcPVAAma6zcLpFd4GZrjR/MRpood3TamjKI2m/z/Uw= github.com/digitalocean/go-libvirt v0.0.0-20210723161134-761cfeeb5968/go.mod h1:o129ljs6alsIQTc8d6eweihqpmmrbxZ2g1jhgjhPykI=
github.com/go-cmd/cmd v1.1.0 h1:LxXflJCRKNZgoKl/0TJdzIDSGFdik3zxaeyL1yXCTsI= github.com/go-cmd/cmd v1.3.1 h1:Scpez/YLL7xBmc1KRxDtHNXnamzQWqF4Sqy9SHnIMfE=
github.com/go-cmd/cmd v1.1.0/go.mod h1:bkfdaV0aMvVwTINGdkU5jlQEd9gF0z4irQutl37pOd8= github.com/go-cmd/cmd v1.3.1/go.mod h1:VZqpYlBauogsSkJrj8NzQM6r/tztSewD/PfHCVjTdnA=
github.com/go-test/deep v1.0.1 h1:UQhStjbkDClarlmv0am7OXXO4/GaPdCGiUiMTvi28sg= github.com/go-test/deep v1.0.7 h1:/VSMRlnY/JSyqxQUzQLKVMAskpY/NZKFA5j2P+0pP2M=
github.com/go-test/deep v1.0.1/go.mod h1:wGDj63lr65AM2AQyKZd/NYHGb0R+1RLqB8NKt3aSFNA= github.com/go-test/deep v1.0.7/go.mod h1:QV8Hv/iy04NyLBxAdO9njL0iVPN1S4d/A3NVv1V36o8=
github.com/hanwen/go-fuse v1.0.0 h1:GxS9Zrn6c35/BnfiVsZVWmsG803xwE7eVRDvcf/BEVc= github.com/hanwen/go-fuse v1.0.0 h1:GxS9Zrn6c35/BnfiVsZVWmsG803xwE7eVRDvcf/BEVc=
github.com/hanwen/go-fuse v1.0.0/go.mod h1:unqXarDXqzAk0rt98O2tVndEPIpUgLD9+rwFisZH3Ok= github.com/hanwen/go-fuse v1.0.0/go.mod h1:unqXarDXqzAk0rt98O2tVndEPIpUgLD9+rwFisZH3Ok=
github.com/hanwen/go-fuse/v2 v2.0.3 h1:kpV28BKeSyVgZREItBLnaVBvOEwv2PuhNdKetwnvNHo= github.com/hanwen/go-fuse/v2 v2.1.0 h1:+32ffteETaLYClUj0a3aHjZ1hOPxxaNEHiZiujuDaek=
github.com/hanwen/go-fuse/v2 v2.0.3/go.mod h1:0EQM6aH2ctVpvZ6a+onrQ/vaykxh2GH7hy3e13vzTUY= github.com/hanwen/go-fuse/v2 v2.1.0/go.mod h1:oRyA5eK+pvJyv5otpO/DgccS8y/RvYMaO00GgRLGryc=
github.com/jollheef/go-system v0.0.0-20160710075518-6ed6b1d2b8db h1:HGcWru24Gt24VFEsX7mxKtO+/NnKCuQ0LYtardulWMc= github.com/jollheef/go-system v0.0.0-20160710075518-6ed6b1d2b8db h1:HGcWru24Gt24VFEsX7mxKtO+/NnKCuQ0LYtardulWMc=
github.com/jollheef/go-system v0.0.0-20160710075518-6ed6b1d2b8db/go.mod h1:Cj2JA+Wov6pwK3QTq2PuRXkZ5UM+DT3apJtBDUS8zKE= github.com/jollheef/go-system v0.0.0-20160710075518-6ed6b1d2b8db/go.mod h1:Cj2JA+Wov6pwK3QTq2PuRXkZ5UM+DT3apJtBDUS8zKE=
github.com/kylelemons/godebug v0.0.0-20170820004349-d65d576e9348 h1:MtvEpTB6LX3vkb4ax0b5D2DHbNAUsen0Gx5wZoq3lV4=
github.com/kylelemons/godebug v0.0.0-20170820004349-d65d576e9348/go.mod h1:B69LEHPfb2qLo0BaaOLcbitczOKLWTsrBG9LczfCD4k= github.com/kylelemons/godebug v0.0.0-20170820004349-d65d576e9348/go.mod h1:B69LEHPfb2qLo0BaaOLcbitczOKLWTsrBG9LczfCD4k=
github.com/mattn/go-runewidth v0.0.7 h1:Ei8KR0497xHyKJPAv59M1dkC+rOZCMBJ+t3fZ+twI54= github.com/mattn/go-runewidth v0.0.9 h1:Lm995f3rfxdpd6TSmuVCHVb/QhupuXlYr8sCI/QdE+0=
github.com/mattn/go-runewidth v0.0.7/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI=
github.com/olekukonko/tablewriter v0.0.4 h1:vHD/YYe1Wolo78koG299f7V/VAS08c6IpCLn+Ejf/w8= github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec=
github.com/olekukonko/tablewriter v0.0.4/go.mod h1:zq6QwlOf5SlnkVbMSr5EoBv3636FWnp+qbPhuoO21uA= github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk=
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522 h1:Ve1ORMCxvRmSXBwJK+t3Oy+V2vRW2OetUQBq4rJIkZE= github.com/stretchr/testify v1.6.1 h1:hDPOHmpOpP40lSULcqw7IrRb/u7w6RpDC9399XyoNd0=
github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM=
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210510120138-977fb7262007 h1:gG67DSER+11cZvqIMb8S8bt0vZtiN6xWYARwirrOSfE=
golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
gopkg.in/alecthomas/kingpin.v2 v2.2.6 h1:jMFz6MfLP0/4fUyZle81rXUoxOBFi19VUFKVDOQfozc= gopkg.in/alecthomas/kingpin.v2 v2.2.6 h1:jMFz6MfLP0/4fUyZle81rXUoxOBFi19VUFKVDOQfozc=
gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw=
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=

View File

@ -1,25 +1,12 @@
From c26580442a4ac18f805b1795ec250d6cf5857a49 Mon Sep 17 00:00:00 2001
From: Mikhail Klementev <blame@dumpstack.io>
Date: Wed, 22 Jan 2020 00:25:16 +0000
Subject: [PATCH 1/4] Remove menu bar
---
src/resources/ui/virt-viewer.ui | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/resources/ui/virt-viewer.ui b/src/resources/ui/virt-viewer.ui diff --git a/src/resources/ui/virt-viewer.ui b/src/resources/ui/virt-viewer.ui
index 93471a4..b029ad7 100644 index 430f879..68856fc 100644
--- a/src/resources/ui/virt-viewer.ui --- a/src/resources/ui/virt-viewer.ui
+++ b/src/resources/ui/virt-viewer.ui +++ b/src/resources/ui/virt-viewer.ui
@@ -18,7 +18,7 @@ @@ -137,7 +137,6 @@
<property name="can_focus">False</property> </child>
<child> <child type="titlebar">
<object class="GtkMenuBar" id="top-menu"> <object class="GtkHeaderBar" id="header">
- <property name="visible">True</property> - <property name="visible">True</property>
+ <property name="visible">False</property> <property name="can-focus">False</property>
<property name="can_focus">False</property> <property name="show-close-button">True</property>
<child> <child>
<object class="GtkMenuItem" id="menu-file">
--
2.23.1

View File

@ -1,20 +1,11 @@
From eac430d01f486e15b55d6fa992e77ded77bb4b1a Mon Sep 17 00:00:00 2001
From: Mikhail Klementev <blame@dumpstack.io>
Date: Wed, 22 Jan 2020 00:41:34 +0000
Subject: [PATCH 2/4] Do not grab keyboard/mouse
---
src/virt-viewer-display-spice.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/src/virt-viewer-display-spice.c b/src/virt-viewer-display-spice.c diff --git a/src/virt-viewer-display-spice.c b/src/virt-viewer-display-spice.c
index 311178b..8e68de2 100644 index 2265f02..1d60d81 100644
--- a/src/virt-viewer-display-spice.c --- a/src/virt-viewer-display-spice.c
+++ b/src/virt-viewer-display-spice.c +++ b/src/virt-viewer-display-spice.c
@@ -307,8 +307,8 @@ virt_viewer_display_spice_new(VirtViewerSessionSpice *session, @@ -317,8 +317,8 @@ virt_viewer_display_spice_new(VirtViewerSessionSpice *session,
gtk_container_add(GTK_CONTAINER(self), GTK_WIDGET(self->priv->display)); gtk_container_add(GTK_CONTAINER(self), GTK_WIDGET(self->display));
gtk_widget_show(GTK_WIDGET(self->priv->display)); gtk_widget_show(GTK_WIDGET(self->display));
g_object_set(self->priv->display, g_object_set(self->display,
- "grab-keyboard", TRUE, - "grab-keyboard", TRUE,
- "grab-mouse", TRUE, - "grab-mouse", TRUE,
+ "grab-keyboard", FALSE, + "grab-keyboard", FALSE,
@ -22,6 +13,3 @@ index 311178b..8e68de2 100644
"resize-guest", FALSE, "resize-guest", FALSE,
"scaling", TRUE, "scaling", TRUE,
NULL); NULL);
--
2.23.1

View File

@ -1,26 +1,14 @@
From c5b51c0a540af34499f2b2a49cb64599c06ba293 Mon Sep 17 00:00:00 2001
From: Mikhail Klementev <blame@dumpstack.io>
Date: Wed, 22 Jan 2020 01:24:57 +0000
Subject: [PATCH 3/4] Use name of appvm applications as a title
---
src/virt-viewer-window.c | 3 +++
1 file changed, 3 insertions(+)
diff --git a/src/virt-viewer-window.c b/src/virt-viewer-window.c diff --git a/src/virt-viewer-window.c b/src/virt-viewer-window.c
index 4c08423..cc8a440 100644 index fe740ce..d45fd4f 100644
--- a/src/virt-viewer-window.c --- a/src/virt-viewer-window.c
+++ b/src/virt-viewer-window.c +++ b/src/virt-viewer-window.c
@@ -1362,6 +1362,9 @@ virt_viewer_window_update_title(VirtViewerWindow *self) @@ -1342,6 +1342,9 @@ virt_viewer_window_update_title(VirtViewerWindow *self)
grabhint,
if (!ungrab && !priv->subtitle) g_get_application_name());
title = g_strdup(g_get_application_name()); }
+ else if (g_str_has_prefix(priv->subtitle, "appvm_")) + } else if (g_str_has_prefix(self->subtitle, "appvm_")) {
+ /* Use name of the application as a title */ + /* Use name of the application as a title */
+ title = g_strdup_printf(_("%s"), &priv->subtitle[strlen("appvm_")]); + title = g_strdup_printf(_("%s"), &self->subtitle[strlen("appvm_")]);
else } else if (self->subtitle) {
/* translators: /* translators:
* This is "<ungrab (or empty)><space (or empty)><subtitle (or empty)> - <appname>" * This is "<subtitle> - <appname>"
--
2.23.1

View File

@ -1,44 +1,12 @@
From 8e95408365b57c64a738381d132ecdc844013afb Mon Sep 17 00:00:00 2001
From: Mikhail Klementev <blame@dumpstack.io>
Date: Wed, 22 Jan 2020 02:27:26 +0000
Subject: [PATCH 4/4] Use title (application name) as subtitle
---
src/virt-viewer-app.c | 21 ++-------------------
1 file changed, 2 insertions(+), 19 deletions(-)
diff --git a/src/virt-viewer-app.c b/src/virt-viewer-app.c diff --git a/src/virt-viewer-app.c b/src/virt-viewer-app.c
index 343b1af..8267f82 100644 index b977b7b..36bce34 100644
--- a/src/virt-viewer-app.c --- a/src/virt-viewer-app.c
+++ b/src/virt-viewer-app.c +++ b/src/virt-viewer-app.c
@@ -718,25 +718,8 @@ virt_viewer_app_set_window_subtitle(VirtViewerApp *app, @@ -976,6 +976,7 @@ virt_viewer_app_set_window_subtitle(VirtViewerApp *app,
gchar *subtitle = NULL; *d = '%';
const gchar *title = virt_viewer_app_get_title(app); } else
subtitle = g_strdup_printf("%s (%s)", title, desc);
+ subtitle = g_strdup_printf("%s", title);
g_free(desc);
}
- if (title != NULL) {
- VirtViewerDisplay *display = virt_viewer_window_get_display(window);
- gchar *d = strstr(title, "%d");
- gchar *desc = NULL;
-
- if (display && VIRT_VIEWER_IS_DISPLAY_VTE(display)) {
- g_object_get(display, "name", &desc, NULL);
- } else {
- desc = g_strdup_printf("%d", nth + 1);
- }
-
- if (d != NULL) {
- *d = '\0';
- subtitle = g_strdup_printf("%s%s%s", title, desc, d + 2);
- *d = '%';
- } else
- subtitle = g_strdup_printf("%s (%s)", title, desc);
- g_free(desc);
- }
+ if (title != NULL)
+ subtitle = g_strdup_printf("%s", title);
g_object_set(window, "subtitle", subtitle, NULL);
g_free(subtitle);
--
2.23.1

4
xml.go
View File

@ -35,7 +35,7 @@ var qemuParamsDefault = `
var qemuParamsWithNetwork = ` var qemuParamsWithNetwork = `
<qemu:commandline> <qemu:commandline>
<qemu:arg value='-device'/> <qemu:arg value='-device'/>
<qemu:arg value='e1000,netdev=net0'/> <qemu:arg value='e1000,netdev=net0,bus=pci.0,addr=0x10'/>
<qemu:arg value='-netdev'/> <qemu:arg value='-netdev'/>
<qemu:arg value='user,id=net0'/> <qemu:arg value='user,id=net0'/>
<qemu:arg value='-snapshot'/> <qemu:arg value='-snapshot'/>
@ -93,7 +93,7 @@ var xmlTmpl = `
<!-- filesystems --> <!-- filesystems -->
<filesystem type='mount' accessmode='passthrough'> <filesystem type='mount' accessmode='passthrough'>
<source dir='/nix/store'/> <source dir='/nix/store'/>
<target dir='store'/> <target dir='nix-store'/>
<readonly/> <readonly/>
</filesystem> </filesystem>
<filesystem type='mount' accessmode='mapped'> <filesystem type='mount' accessmode='mapped'>